Bu makalede programlamanın en can alıcı konularından biri olan Thread kullanımı hakkında bilgiler yer almaktadır.Thread kullanımı iki veya daha fazla

               Bu makalede programlamanın en can alıcı konularından biri olan Thread kullanımı hakkında bilgiler yer almaktadır.Thread kullanımı iki veya daha fazla iş yaparken bir işin diğer bir işe engel olmasının önüne geçmek için kullanılır.

              Örneğin bir web servisinden binlerce ürün çekiyorsunuz ve bu işlem bayağı bir uzun sürüyor. Sizde bu arada kullanıcıya bir splash formu açarak bir progressbar ekleyerek işlemin devam ettiğini bildirebilirsiniz.Aşağıdaki örnekte buna benzer bir işlem gerçekleştireceğiz.

             Web servisinden ürünleri çekerken,kullanıcıya da aynı 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çacaktır. Biz örneğimizde web servisinden ürünler gelmeye başladığı anda yeni bir Thread açıp, main threadda ürünler gelirken açtığımız ikinci threadda ise splash formumuzu görüntüleyeceğiz.Ürünler gelince de Threadı sona erdireceğiz.Dilerseniz örneğimize geçelim.

Aşağıdaki işlemde önce splash formunu açacak olan yeni bir Thread oluşturuluyor ve threada yerine getirmesi gereken bir görev olarak FormAc metodu veriliyor. splashThread.Start() satırında ise bu thread başlatılıyor.Bu esnada splash formumuz görüntülenirken, main threadda ise web servisinden ürünler getiriliyor.Urun getirme işlemi bittiği anda da splashThread.Abort() satırı ile splash formunun görüntülenmesi sona eriyor.

 

 

Urunleri Getiren ve Splash Formunu Açan Threadın Başlatıldığı 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 işlemlerim

                }

               

                gcntrlListe.DataSource = urunler;

                gvListe.RefreshData();

               

                splashThread.Abort();

            }

        }


splashThread Nesnesine Parametre Olarak Verdiğim FormAc() Metodu:

 

void FormAc()

        {

            splash sp = new splash();

            sp.ShowDialog();

        }
 

 


splash Formunun Kodları:

 

 

 

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++;

        }

    }

 

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder