C#

C# Görev Yöneticisi

Merhabalar, C# derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde basit bir görev yöneticisi yapacağız ve bu işlemi Windows Forms kullanarak yapacağız. Hadi başlayalım !
Öncelikle forma çalışan işlemleri görebilmek için bir tane ListView ve LisView’den seçilen işlemi durdurabilmek içinde bir tane Button ekleyelim. Ayrıca ListView’e sırasıyla Program Adı, PID, CPU Değeri kolonlarını ekleyelim. Ardından formun Load eventini oluşturup içine girelim.
Formun Load eventini oluşturmak için form üzerindeki boş bir yere çift tıklayabilirsiniz.
Bizim işimiz CPU üzerinde çalışan işlemler yani processlerle ilgili ve C#’ta process işlemleri System.Diagnostics kütüphanesi sayesinde rahatlıkla yapılabiliyor. Fakat bu kütüphaneyi kullanabilmek için kodları yazdığımız sayfada çağırmamız gerekiyor, bunun içinde sayfanın en başına
using System.Diagnostics;
kod satırını ekleyelim. Ardından tekrardan formun Load eventi için oluşturulan fonksiyon içine dönelim.C#’ta çalışan prosesleri Process sınıfı altında bulunan ve static tipteki yani bulunduğu sınıfın yeni bir nesnesi türetilmeden doğrudan erişilebilen GetProcesses() fonksiyonu sayesinde kolaylıkla bulabiliyoruz.
Bu fonksiyonun parametre almayan kullanımı olduğu gibi string tipte makine adını alan bir overload özelliğide var fakat aynı bilgisayar üzerinde olduğumuz için her iki kullanımda da aynı sonuç verecektir. Bu yüzden biz parametre almayan şekliyle kullanalım.
Fonksiyon sonucunda ise geriye process listesinin tutulduğu Process[] tipinde veri geri dönüyor. Bu liste içerisinde o anda bilgisayarda çalışan tüm prosesler tutuluyor ve biz bu proseslerin adı, CPU kullanımı ve her proses için ayrı, bi nevi prosesin kimlik numarası olan PID değerlerini alıp form üzerine eklediğimiz ListView’de göstereceğiz.
Elimizde Process dizisi olduğu için doğrudan ListView’e ekleme yapamayacağız. Peki nasıl yapacağız ? derseniz de, diziyi döngü ile dönecek ve her adımda ilgili dizi elemanını ListView’e ekleyeceğiz. Ama elbette doğrudan Process nesnesini değil, Process’in adı, CPU kullanım değeri ve PID değerlerini alıp ekleyeceğiz. Teorik olarak anlattığım işlemlerin kodu aynen şöyle;
foreach(Process process in Process.GetProcesses())
{
    listView1.Items.Add(new ListViewItem(new string[]
    {
        process.ProcessName,
        process.Id.ToString(),
        Math.Round(Convert.ToDouble(process.PrivateMemorySize64 / 1024)) + " KB"
    }));
}
foreach döngüsü içerisindeki process.ProcessName ile o anki prosesin adını yani hangi program tarafından çalıştırıldığını, process.Id ile prosesin PID değerini (PID değeri integer olduğu ve ListViewItem içerisine string tipte veri eklememiz gerektiği için ToString() fonksiyonu ile stringe çevirdik), process.PrivateMemorySize64 ile de byte cinsinden CPU kullanımını bulduk. Byte olarak CPU kullanımını bulduktan sonra 1024’e bölerek KB cinsinden bulduk ve Math.Round() ile sonucu en yakın tam sayıya yuvarladık.
Evet buraya kadar ListView içerisine o anda çalışan tüm prosesleri ekledik, şimdi geldik seçilen prosesi sonlandırmaya.Bunun için forma eklediğimiz Button’un click eventini oluşturup içine girelim. Button’un click olayını oluşturmak için Button üstüne çift tıklayabilirsiniz.
ListView üzerinden bi satır seçtiğimizde ne yazık ki doğrudan prosese ulaşamıyoruz ama tabi C#’ta çareler tükenmez 🙂
Biz ListView içerisinde prosesin adı, CPU kullanımı ve PID değerini eklemiştik. C#’ta da yine Process sınıfı altında bulunan GetProcessById() static fonksiyonu ile PID değerini kullanarak prosese ulaşabiliyoruz. Prosese ulaştıktan sonra Kill() fonksiyonu ile prosesi sonlandırabiliyoruz. Bu fonksiyon herhangi bir parametre istemiyor ve void tipte olduğu için geriye birşey döndürmüyor.
Hadi şimdi seçilen prosesi sonlandıralım;
Process.GetProcessById(Convert.ToInt32(view.SelectedItems[0].SubItems[1])).Kill();
Evet artık projemiz çalıştırılmaya hazır. Çalıştırdığınızda form yüklenir yüklenmez o anda çalışan prosesler ListView’de görüntülenecek ve formda bulunan Button sayesinde istediğiniz prosesi sonlandırabilirsiniz.
Fakat dikkat edin işletim sisteminin izin vermediği bir prosesi sonlandırmaya çalışmayın çünkü sonlandırılmayacaktır.Evet bu dersimizde buraya kadardı, yazdığımız tüm kodları aşağıya bırakıyorum;
private void Form1_Load(object sender, EventArgs e)
{
    foreach (Process process in Process.GetProcesses())
    {
        listView1.Items.Add(new ListViewItem(new string[]
        {
            process.ProcessName,
            process.Id.ToString(),
            Math.Round(Convert.ToDouble(process.PrivateMemorySize64 / 1024)) + " KB"
         }));
    }
}
private void Button1_Click(object sender, EventArgs e)
{
    Process.GetProcessById(Convert.ToInt32(listView1.SelectedItems[0].SubItems[1].Text)).Kil();
}
Tüm C# derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu