C# Thread Kullanımı #2

0
C# Thread Kullanımı #2

Herkese merhaba bu yazıda thread kullanımına kod olarak bakacağız. Thread nedir, ne işe yarar yazısına buradan ulaşabilirsiniz. Dediğimiz gibi thread eş zamanlı işlem yapmamızı sağlar, dikkat etmemiz gereken ilk unsur ise kritik bölgeye erişirken thread’leri zamanlamak yani içerde birisi varsa içeri başka thread almamız gerekir. Bu gibi durumları sağlamak için diğer diğer yazıda anlattığımız kritik bölge oluşturma elemanlarını kullanacağız(kritik bölge oluştruma elemanları nasıl bişeyse onu şuan ben uydurdum 🙂 ). Ama bu yazıda ilk öncelikle ortak bölgeye erişmeye çalışmayalım ve thread’lerimiz farklı işler yapsınlar. Önceki yazıda verdiğim örneğe benzer bir örnek yapalım programımız bu siteden bazı resimler çeksin ve form ekranının bir kenarında sergilesin, diğer bir tarafta butona basınca progress bar dolsun, diğer bir tarfta ise yine başka bir butona basınca listbox’a veri yazsın, thread sayesinde tüm bu işlemleri aynı anda yaptıracağız.

 

İlk önce thread nasıl oluşturulur nasıl başlatırlır, susturulur, geri çalıştırılır basitce ona bakalım;

 System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;//windows bazen kendi oluşturduğumuz thread'lere izin vermiyor bu engeli aşmak için 
 using System.Threading;//thread kullanımı için eklmemiz gereken kütüphane
 Thread thread = new Thread(threadFonk);//burada bir fonksiyon ismi yazacağız thread bu fonksiyonu çalıştıracak
 thread.Start();//thread'i başlatmamız gerekir 
 thread.Suspend();//thread'i durdurur ama yok edemez sadece susturur
 thread.Resume();//duran thread'i geri çalıştırır 
 void threadFonk()//çalışacak fonksiyon
 {
 .... çalışacak işlemler
 Thread.Sleep(1000);//thread'i yavaşlatmak istersek kullanacağımız fonksiyon
 
 }

Şimdi en üstte bahsettiğimiz örneğe bakalım;

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;//thread kullanımı için eklmemiz gerek kütüphane


namespace blogTiretKullanimi1
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;//windows bazen kendi yazdığımız thread'leri kullanmamız engelliyor 
 }//bu engeli kaldırmak için yazdığımız satır


private void button1_Click(object sender, EventArgs e)
 {
 Thread progresDoldurThread = new Thread(progresDoldurucu);//İlk thread'imiz progres bar doldurmak için 
 progresDoldurThread.Start();//Thread'i başlatıyoruz
 }

private void progresDoldurucu()//progresDoldurThread'i için yazdığımız fonksiyon
 {
 while(true)//progres bar dolana kadar dönen döngümüz
 {
 progressBar1.Maximum = 100;//progres bar'ın maximum değeri
 progressBar1.Value += 10;//değerinin kaçar kaçar artacağı
 Thread.Sleep(1000);//fonksiyonun bekleme süresi mili saniye cinsinden
 }
 }

private void Form1_Load(object sender, EventArgs e)//form ekranı ilk açılırken resimleri çekmeye başlıyor
 {
 Thread resimDonder=new Thread(resimCekici);//göstereceğimiz resimler için oluşturduğumuz thread
 resimDonder.Start();//thread başlatma
 }

private void resimCekici()//resimleri siteden çekmek için yazdığımız thread fonksiyonu
 {
 while(true)//resimler picture box'ımızda 1 er saniye ara ile gösteriliyor
 {
 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;//gelen resmi picture box'ın boyutuna göre ölçeklendiriyoruz
 pictureBox1.Image = resimGetir(@"http://ibrahimozcelik.net/wp-content/uploads/2017/06/Ekran-Al%C4%B1nt%C4%B1s%C4%B1-1-640x320.png");
 Thread.Sleep(1000);//thread fonksiyonunu 1 saniye duraklatıp diğer resmi çekiyoruz
 pictureBox1.Image = resimGetir(@"http://ibrahimozcelik.net/wp-content/uploads/2017/06/oneCikanGorsel1-640x405.png");
 Thread.Sleep(1000);
 pictureBox1.Image = resimGetir(@"http://ibrahimozcelik.net/wp-content/uploads/2017/07/uzak-640x427.png");
 Thread.Sleep(1000);
 pictureBox1.Image = resimGetir(@"http://ibrahimozcelik.net/wp-content/uploads/2017/07/tiret1-640x448.png");
 Thread.Sleep(1000);
 }
 }

Bitmap resimGetir(String url)//siteden gelen url ile resimler çekiliyor
 {
 WebRequest resimIstek = WebRequest.Create(url);//url için istek yapıyoruz
 return (Bitmap)Bitmap.FromStream(resimIstek.GetResponse().GetResponseStream());//geri dönen resmi resimCekici fonksiyonuna gönderiyoruz
 }

private void button2_Click(object sender, EventArgs e)//son thread'imizin olduğu kısım
 {
 Thread listBoxThread = new Thread(listBoxDoldur);//listbox'ı  doldurmak için kullandığımız thread
 listBoxThread.Start();//thread başlatılıyor
 }

private void listBoxDoldur()//thread fonksiyonumuz
 {
 while(true)
 {
 listBox1.Items.Add("ibrahim ÖZÇELİK");//thread çalışınca sürekli listbox'a ekliyor
 Thread.Sleep(500);//yarım saniye bekleme süresi
 }
 }

}
}

Bu yazıda thread’lerin eş zamanlı kullanılabileceğine dair bir örnek vermeye çalıştım, bu çok basit bir örnek, thread artık olmazsa olmaz sonra ki yazıda threadler ile ortak alana erişmeyi anlatmaya çalışacağım herkese iyi çalışmalar.

LEAVE A REPLY