WebElektronika

Processzek használata a C# nyelv segítségével

person access_time 2017.05.02.
Egy elég mély, átfogó témának az alapjait kezdjük el most megismerni. A most induló minisorozatunkban megnézzük, hogyan lehet processzeket létrehozni a C# nyelvben, illetve, átnézzük majd a szálak használatának az alapjait is. Ezután aszinkron fogunk metódusokat meghívni, és megismerkedünk a callback-kel is.


Ha elindítjuk a Task Manager-t, akkor az alkalmazásaink neveit, és egyéb különböző adatait láthatjuk (1. ábra). Látjuk a neveket, a process ID-kat (PID), illetve még a szálak számát (Threads) is. 

kep
1. ábra   A Task Manager
 

Készítsünk most egy olyan alkalmazást, amelynek segítségével ezeknek az adatoknak egy részét megjelenítjük, illetve el tudunk indítani (majd leállítani) mi is különböző process-eket.
Indítsuk el a Visual Studio-t és hozzunk létre egy új Console projektet (2. ábra). A projekt neve legyen : ConsoleSzalak.

kep
2. ábra   A projekt létrehozása
 

Ahhoz, hogy tudjunk a C# nyelvben process-ekkel dolgozni, szükségünk lesz a "System.Diagnostics" szerelvényre. Ezt vagy mi írjuk be ("using System.Diagnostics;") vagy pedig beírjuk a "Process"-t, majd a CTRL+. segítségével adjuk hozzá a szerelvényt a projektünkhöz (3. ábra).

kep
3. ábra   A System.Diagnostics szerelvény hozzáadása a projekthez
 

Ezután másojuk be a következő kódot a Program.cs file-ba.

class Program
    {
        static void Main(string[] args)
        {
            Process[] processek = Process.GetProcesses();
            foreach (var item in processek)
            {
                Console.WriteLine("PID: {0}, \t Név: {1}, \t\t\t Szálak : {2}",
                item.Id, item.ProcessName, item.Threads.Count);
            }

            Console.ReadLine();
        }
    }

 

A "processek" nevű, Process típusú gyűjteménybe azok a processzek kerülnek, amelyek a GetProcess() metódus meghívásakor futnak. Ha később listáznánk ki ezt a gyűjteményt a foreach ciklus segítségével, akkor előfordulhat, hogy egy process már véget ért, viszont a "processek" gyűjteményben még ott van. Ekkor futási hiba (kivétel) keletkezik, tehát akkor javasolt a try-catch blokk használata. Mi ettől eltekintettünk.

Indítsuk el az alkalmazásunkat, a futási eredmény a 4. ábrán látható (A \t segítségével tudjuk formázni a megjelenítést.).

kep
4. ábra   A process ID-k, a nevek, illetve a szálak számai
 

Keressünk most rá egy adott nevű process-re. Ehhez a "GetProcessByName()" metódusra lesz szükségünk, amely szintén egy "Process" típusú gyűjteményt ad vissza, hiszen vannak olyan alkalmazások, amelyek ugyanolyan néven futnak, de más PID alatt.
A Main() metódusban lévő változtatást kiemeltük.

class Program
    {
        static void Main(string[] args)
        {
            Process[] processek = Process.GetProcessesByName("chrome");
            foreach (var item in processek)
            {
                Console.WriteLine("PID: {0}, \t Név: {1}, \t\t\t Szálak : {2}",
                item.Id, item.ProcessName, item.Threads.Count);
            }

            Console.ReadLine();
        }
    }

 

Futtassuk újra a programunkat úgy, hogy a "chrome" alkalmazás adatai érdekelnek minket (5. ábra). Látható, hogy a "chrome"-nak különböző PID értékei vannak, tehát a "chrome" alkalmazásunk több process-t használ (és még több szálat....).


Ha érdeklődik a cikk teljes tartalma után, kérjük, lépjen be a WebElektronika oldalára.

     Köszönjük.