C# Form Uygulamalarinda Task Yapisi

C# Form Uygulamalarinda Task Yapisi

Paralel olarak yürütülen islemlerin olusturulmasi konusunda task mantigi isimizi oldukça kolaylastirmaktadir. Öncelikle yeni bir taski nasil olusturacagimizdan bahsedelim. System.Threading ve System.Threading.Tasks isimli namespace leri projemize dahil etmemiz gerekmekte.

 private void button1_Click(object sender, EventArgs e)
        { 
        CheckForIllegalCrossThreadCalls = false; 
        //cross thread exception hatalarina karsi önlem...

        Task task1 = Task.Factory.StartNew(() =>
            {
                for (int i = 0; i <= 30; i++)
                {
                    Thread.Sleep(500);
                    label1.Text = i + " ";
                } 
            });
        Task task2 = Task.Factory.StartNew(() =>
            {
 
                for (int j = 0; j <= 30; j++)
                {
                    Thread.Sleep(500);
                    label2.Text = j + " ";
                } 
            });
        }
.

Yukarida ki CheckForIllegalCrossThreadCalls = false; satiri ise cross thread exception hatalarini almamamizi saglar.

Task içerisinde ki islemi durdurmak için Wait, WaitAll, WaitAny metodlari kullanilir.

Kullanim Sekilleri

  • Wait:TaskIsmi.Wait();
  • WaitAll: Task.WaitAll(TaskISmi1,TaskIsmi2….);
  • WaitAny: Task.WaitAny(TaskIsmi1,TaskIsmi2…);

Benim en çok kullandigim iki metod ise ki bunlar eminim sizler tarafindan çok kullanilacaktir, ContinueWith ve IsCompleted metodlari. Kullanim sekilleri ise;

CheckForIllegalCrossThreadCalls = false;
Task task1 = Task.Factory.StartNew(() =>
{

    for (int i = 0; i <= 30; i++)
    {
        Thread.Sleep(500);
        label1.Text = i + " ";

    }

})
.ContinueWith((task2)=>
{
	for (int j = 0; j <=30; j++)
    {
     Thread.Sleep(500);
      label2.Text=j+" ";
    }
                        
});

Burada iki task ayni anda çalismaya baslar.

IsCompleted metodunsa ise Continuewith metodunda yazmis oldugumuz kod satirlarinin sonunda for döngüsünden sonra

for (int j = 0; j <=30; j++)
{
      Thread.Sleep(500);
      label2.Text=j+" ";
}
      if (task2.IsCompleted==true)
{
       MessageBox.Show("task görevi bitti");
}
                       
});

Burada ise birinci task sayma islemini bitirdikten sonra devreye direk 2. task girer.

.

Umarim isinize yarar bilgiler olmustur.

Bir cevap yazın

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