Thread Nedir? Nasıl ve ne zaman kullanılır?

  • 17.08.2010 13:41
  • C Sharp
  • 19699

               Bu makalede programlamanin en can alici konularindan biri olan Thread kullanimi hakkinda bilgiler yer almaktadir.Thread kullanimi iki veya daha fazla is yaparken bir isin diger bir ise engel olmasinin önüne geçmek için kullanilir.

              Örnegin bir web servisinden binlerce ürün çekiyorsunuz ve bu islem bayagi bir uzun sürüyor. Sizde bu arada kullaniciya bir splash formu açarak bir progressbar ekleyerek islemin devam ettigini bildirebilirsiniz.Asagidaki örnekte buna benzer bir islem gerçeklestirecegiz.

             Web servisinden ürünleri çekerken,kullaniciya da ayni anda splash formunu göstermek istersek, önce ürünleri çekecek; daha sonra splash formunu gösterecektir. Bu da çok saçma bir duruma yol açacaktir. Biz örnegimizde web servisinden ürünler gelmeye basladigi anda yeni bir Thread açip, main threadda ürünler gelirken açtigimiz ikinci threadda ise splash formumuzu görüntüleyecegiz.Ürünler gelince de Threadi sona erdirecegiz.Dilerseniz örnegimize geçelim.

Asagidaki islemde önce splash formunu açacak olan yeni bir Thread olusturuluyor ve threada yerine getirmesi gereken bir görev olarak FormAc metodu veriliyor. splashThread.Start() satirinda ise bu thread baslatiliyor.Bu esnada splash formumuz görüntülenirken, main threadda ise web servisinden ürünler getiriliyor.Urun getirme islemi bittigi anda da splashThread.Abort() satiri ile splash formunun görüntülenmesi sona eriyor.

 

 

Urunleri Getiren ve Splash Formunu Açan Threadin Baslatildigi Metod:

 

        public  void UrunGetir()

        {

 

                Thread splashThread= new Thread(new ThreadStart(this.FormAc));

                splashThread.Start();

 

                UrunlerWebServisiSoapClient servis = new UrunlerWebServisiSoapClient();

                List<Urun> webServistenGelenUrunler=servis.UrunGetir();

 

               

                foreach (Urun item in webServistenGelenUrunler)

                {

                    //Ürünle ilgili islemlerim

                }

               

                gcntrlListe.DataSource = urunler;

                gvListe.RefreshData();

               

                splashThread.Abort();

            }

        }


splashThread Nesnesine Parametre Olarak Verdigim FormAc() Metodu:

 

void FormAc()

        {

            splash sp = new splash();

            sp.ShowDialog();

        }
 

 


splash Formunun Kodlari:

 

 

public partial class splash : DevExpress.XtraEditors.XtraForm

    {

        public splash()

        {

            InitializeComponent();

        }

 

        private void splash_Load(object sender, EventArgs e)

        {

            timer1.Enabled = true;

        }

 

        private void timer1_Tick(object sender, EventArgs e)

        {

            if (pbDurum.Value == 100)

                pbDurum.Value = 0;

 

            pbDurum.Value++;

        }

    }

 

Siz de düşüncelerinizi yazabilirsiniz:

;