Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Clasa Process in .Net

Sunt situatii in care din aplicatia pe care o scriem avem nevoie sa pornim o alta aplicatie. Daca lucram in .Net asta se face cu ajutorul clasei Process aflata in namespace-ul System.Diagnostics. Astazi o sa fac o scurta prezentare a acestei clase, urmand ca in viitor sa revin cu mai multe detalii si mai multe exemple.

Ce putem face, simplu, cu ajutorul acestei clase. Sa pornim, de exemplu, un notepad! La ce ne trebuie? Deocamdata nu ne trebuie, e doar un exemplu:

using System.Diagnostics;

//.... cod

    static void Main(string[] args)
    {
        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("notepad.exe");
        p.Start();
    }

//.... cod


Codul de mai sus, asa cum ai ghicit, deschide o sesiune de notepad. notepad.exe se poate inlocui cu orice alt executabil (cale absoluta, relativa, numele executabilului daca el este definit prin nu stiu ce variabile de system).

Insa nu e singura posibilitate. Nume aplicatiei poate fi inlocuit cu… un url. Codul devine:

//…. cod

static void Main(string[] args)
{
Process p = new Process();
p.StartInfo = new ProcessStartInfo(“http://google.com/”);
p.Start();
}

//…. cod
care, evident, va deschide browserul default al sistemului si va incarca pagina specificata (google in cazul asta).

Odata pornit, un proces poate fi controlat in diverse feluri. Un mod de a controla un process este sa il opresti. Asta se face cu ajutorul metodei Kill() asociata obiectului:

using System.Diagnostics;

//.... cod

    static void Main(string[] args)
    {
        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("notepad.exe");
        p.Start();

        Thread.Sleep(2000);  //asteapta 5 secunde
        p.Kill();
    }

//.... cod

Asa cum se observa, obiectul de tip Process are o proprietate p.StartInfo de tip ProcessStartInfo unde se definesc practic parametrii procesului care va fi pornit.

Cred ca destul de utila este pornirea unui proces care reprezinta o aplicatie de tip consola. Aceasta difera un pic de procesele de tip fereastra, prin faptul ca din consola se primesc date (output-ul consolei) sau, eventual, se transmit date. Pentru a executa si primi output-ul unei aplicatii de tip consola se procedeaza asa:

using System.Diagnostics;

//.... cod

    static void Main(string[] args)
    {
        Process p = new Process();
        ProcessStartInfo psi = new ProcessStartInfo(externalConsoleApp);  //calea spre aplicatia console
        psi.CreateNoWindow = false;  //nu vreau sa fie creata fereastra aplicatiei
        psi.RedirectStandardOutput = true;  //vreau sa redirectez StandardOutput pt a-l putea citi
        psi.UseShellExecute = false;  //trebuie setata false pt a putea redirecta StandardOutput

        p.StartInfo = psi;
        p.Start();
        while (!p.StandardOutput.EndOfStream)
        {
            Console.Write(Char.ConvertFromUtf32(p.StandardOutput.Read()));
            //Console.WriteLine(p.StandardOutput.ReadLine());  //citeste linie cu linie
            //Console.WriteLine(p.StandardOutput.ReadToEnd()); //citeste tot out-put-ul ca bloc - nu trebuie executat in block while.
        }
        Console.WriteLine();
        Console.WriteLine("Exit code: {0}", p.ExitCode);
        


        Console.ReadKey();
    }
//.... cod
Category: Uncategorized

Your email address will not be published. Required fields are marked *

*