Merhaba arkadaşlar winform uygulamam var ve buttona tıklandığında veritabanında veri çekiyorum ve uzun sürüyor ben işlem gerçkeleşirken bir mesaj vermek istiyorum örneğin Lütfen bekleyiniz.. şeklinde ama buttona tıkladığım gibi uygulama donuyor onun için threading kullanayım dedim bu kez de cross threading (çakışma) oluyor önerileriniz nelerdir ?teşekkürler

soruldu: 11 Şub '15, 09:52

c3434's gravatar image

c3434
199232632
cevap kabul oranı: 50%

1

Aradığın çözüm eventler ile ilgili. winform da event nasıl kullanılır şeklinde araştırma yaparsan hem öğrenmiş olursun hemde işini görürsün.

(11 Şub '15, 09:55) Purecoder Purecoder's gravatar image

Uygulamanın donmasının nedeniana thread'in işleminin hala süremesinden kaynaklanıyor.Bu nedenle multi-thread in yapmak gerekiyor uygulamamızı.

Örnek bir uygulama açtım. label ve button ekleyip aşağıdaki örnek kod parçasını yazdım yapmak istediğine yardımcı olacaktır.

        public Form1()
        {
            InitializeComponent();
            //Thread ile çalışıldığında bu özelliğin false olarak setlenmesi gerekiyor
            CheckForIllegalCrossThreadCalls = false;
        }

        private void button1_Click(object sender, EventArgs e)
        {

            string deger = "Müslüm ÖZTÜRK";

            BackgroundWorker worker=new BackgroundWorker();
            worker.DoWork+=WorkerOnDoWork;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            worker.RunWorkerAsync(deger);

            label1.Text = "İşlem başladı lütfen bekleyiniz.";
        }

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            label1.Text = "İşlem tamamlandı.";
        }

        private void WorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
        {
            //Worker a gönderdiğimi değeri okuyup işlemlerimizde kullanabilir.
            var deger = doWorkEventArgs.Argument as string;

            //Burada uzun süren işlemler yapılacak
            Thread.Sleep(5000);//Örnek olsun diye thread i bekletiyorum
        }

Ayrıca farklı threadler ile aynı objenin değerin değiştirecek isen o zaman lock() kullanmanı öneririm. lock ile ilgili buradan örneğe ulaşabilirsin.

permanent link

cevaplandı: 11 Şub '15, 11:34

M%C3%BCsl%C3%BCm%20%C3%96ZT%C3%9CRK's gravatar image

Müslüm ÖZTÜRK
10.5k103690
cevap kabul oranı: 27%

değiştirildi: 11 Şub '15, 11:36

bilginiz için teşekkür ederim çok iyi aydınlatınız.

(12 Şub '15, 02:55) c3434 c3434's gravatar image

Gereken işlemleri yaptım çalıştı ama ikinci kez butona tıklanınca tekrar çakışma oldu Form uygumamda birden fazla thread çalışıyor ondan olabilir acaba çağırfığım tüm threadleri lock ile kilitlediğim halde tekrar çakıştı önerilerinz için şimdiden teşekkürler?

(12 Şub '15, 09:51) c3434 c3434's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×238
×31
×4
×2

Soruldu: 11 Şub '15, 09:52

Görüntüleme: 488 kez

Son güncelleme: 12 Şub '15, 17:50

powered by BitNami OSQA