08 December 2016

Threading Örnekleri

Uygulamalarımızda aynı anda birden fazla iş yapmak için thread kullanırız. Bu şekilde birden fazla işbölümü yapabiliriz. Farklı threadler farklı metodları veya aynı metodları kullanabilirler. Uygulamamızda thread kullanmak için öncelikle namespace’i uygulamaya eklemeliyiz:

using System.Threading;

Kullanmamız gereken önemli bir komut:

System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;

Bu komut satırıyla derleyicinin bu şekilde thread kullanılmasına izin vermiş oluruz.

Thread örneklerine bakalım:

Örnek 1:

Thread Örnekleri

void Doldur()
 {
 for (int i = 0; i < 3000; i++)
 {
 lstSayilar.Items.Add(i);
 lstSayilar.SelectedIndex = i;
 }
 }
private void btnGoster_Click(object sender, EventArgs e)
 {
 Doldur();
 }
private void btnIsim_Click(object sender, EventArgs e)
 {
 MessageBox.Show(txtIsim.Text);
 }
private void btnThread_Click(object sender, EventArgs e)
 {
 ThreadStart ts = new ThreadStart(Doldur);
 Thread t1 = new Thread(ts);
 t1.Start();
 }
private void Form1_Load(object sender, EventArgs e)
 {
 CheckForIllegalCrossThreadCalls = false;
 }

Örnek 2:

Threading

public Form2()
 {
 InitializeComponent();
 CheckForIllegalCrossThreadCalls = false;
 }
 void CiftSayilar(object obj)
 {
 for (int i = 0; i < 5000; i++)
 {
 if (i % 2 == 0)
 {
(obj as ListBox).Items.Add(i);
 (obj as ListBox).SelectedItem = i;
}
 else
 continue;
 }
 }
void TekSayilar(object obj)
 {
 for (int i = 0; i < 5000; i++)
 {
 if (i % 2 != 0)
 {
(obj as ListBox).Items.Add(i);
 (obj as ListBox).SelectedItem = i;
 }
 else
 continue;
 }
 }
 private void btnCift_Click(object sender, EventArgs e)
 {
 ParameterizedThreadStart ps = new ParameterizedThreadStart(CiftSayilar);
 Thread t = new Thread(ps);
 t.Start(lstCiftSayilar);
 }
private void btnTek_Click(object sender, EventArgs e)
 {
 Thread t = new Thread(new ParameterizedThreadStart(TekSayilar));
 t.Start(lstTekSayilar);
 }
private void Form2_Load(object sender, EventArgs e)
 {
}
 }

Örnek 3:

System Threading

public Form3()
 {
 InitializeComponent();
 CheckForIllegalCrossThreadCalls = false;
 }
void Doldur(object obj)
 {
 for (int i = 0; i < 1000; i++)
 {
 ListBox lst = (ListBox)obj;
 lst.Items.Add(i);
 lst.SelectedItem = i;
 }
 }
//********************** ÖNCELİKLER ***********************
// Highest
// above normal
// normal
// below normal
// lowest
private void btnDoldur_Click(object sender, EventArgs e)
 {
 Thread t1 = new Thread(new ParameterizedThreadStart(Doldur));
 t1.Priority = ThreadPriority.Highest;
 t1.Start(listBox1);
Thread t2 = new Thread(new ParameterizedThreadStart(Doldur));
 t2.Priority = ThreadPriority.Normal;
 t2.Start(listBox2);
Thread t3 = new Thread(new ParameterizedThreadStart(Doldur));
 t3.Priority = ThreadPriority.Lowest;
 t3.Start(listBox3);
 }

Örnek 4:

Thread Örnekleri

void Doldur()
 {
 for (int i = 0; i < 3000; i++)
 {
 listBox1.Items.Add(i);
 listBox1.SelectedItem = i;
 if (i == 1500)
 {
 t2.Start();
 t2.Join();
 }
 }
 }
 void Doldur2()
 {
 for (int i = 0; i < 4000; i++)
 {
 listBox2.Items.Add(i);
 listBox2.SelectedItem = i;
 }
}
Thread t1,t2;
 private void btnGoster_Click(object sender, EventArgs e)
 {
 t1 = new Thread(new ThreadStart(Doldur));
 t2 = new Thread(new ThreadStart(Doldur2));
 t1.Start();
 }
private void Form4_Load(object sender, EventArgs e)
 {
}

Örnek 5:

Thread

//paylaşılan kaynak
 Logger logger = new Logger();
private void btnTest1_Click(object sender, EventArgs e)
 {
 Thread t1 = new Thread(logger.Write);
 t1.Name = "SQL Thread";
 t1.Start("1000 Satır Eklendi");
 }
private void btnTest2_Click(object sender, EventArgs e)
 {
 Thread t2 = new Thread(logger.Write);
 t2.Name = "Download Thread";
 t2.Start("Download işlemi Tamamlandı");
 }