Üye Kayıt Üye Giriş

C# Form Uygulamalarında Task Yapısı


C# Form Uygulamalarında Task Yapısı

Paralel olarak yürütülen işlemlerin oluşturulması konusunda task mantığı işimizi oldukça kolaylaştırmaktadır. Öncelikle yeni bir taskı nasıl oluşturacağımızdan bahsedelim. System.Threading ve System.Threading.Tasks isimli namespace leri projemize dahil etmemiz gerekmekte.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void button1_Click(objectsender, EventArgs e)
       {
       CheckForIllegalCrossThreadCalls = false;
       //cross thread exception hatalarına karşı ö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 + " ";
               }
           });
       }

Yukarıda ki CheckForIllegalCrossThreadCalls = false; satırı ise cross thread exception hatalarını almamamızı sağlar.

Task içerisinde ki işlemi durdurmak için Wait, WaitAll, WaitAny metodları kullanılır.

Kullanım Şekilleri

      -   Wait:Taskİsmi.Wait();

      -   WaitAll: Task.WaitAll(TaskİSmi1,Taskİsmi2….);

      -   WaitAny: Task.WaitAny(Taskİsmi1,Taskİsmi2…);

Benim en çok kullandığım iki metod ise ki bunlar eminim sizler tarafından çok kullanılacaktır, ContinueWith ve IsCompleted metodları. Kullanım şekilleri ise;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 aynı anda çalışmaya başlar.

IsCompleted metodunsa ise Continuewith metodunda yazmış olduğumuz kod satırlarının sonunda for döngüsünden sonra

1
2
3
4
5
6
7
8
9
10
11
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 işlemini bitirdikten sonra devreye direk 2. task girer.

Umarım işinize yarar bilgiler olmuştur.

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER