En iyi yanıtlayıcılar
2. form üzerinde değişiklik yaparken sorun yaşıyorum.

Soru
-
Merhabalar,
Bir method içerisindeki işlemleri Thread içerisine aldım ve işlemler tamamlanırken ekrana farklı bir form(form2 diyelim) açarak Lütfen Bekleyiniz gibi bir yazı yazarak ekranda gösterdim. İşlemler tamamlandığında form2 deki Lütfen bekleyiniz yazısını değiştirmek istediğimde hiç bir şekilde degişiklik olmuyor, Kodlar aşağıdaki gibi,
private void Progress2() { PleaseWait pw = new PleaseWait(lblGuardianNameSurname.Text); pw.Show(); Thread thread1 = new Thread(new ThreadStart(Process)); thread1.Start(); while (thread1.IsAlive) Application.DoEvents(); switch (actionTypeId) { case 1: pw.Messages(1); break; case 2: pw.Messages(2); break; } pw.Hide(); }
Buda Form2'deki yani Lütfen bekleyiniz yazısı yazan formdaki kodlarım,
public void Messages(int number) { if (number == 1) { lblwait.Text = "HOŞGELDİNİZ"; Thread.Sleep(3000); } if (number == 2) { lblwait.Text = "İYİ GÜNLER"; Thread.Sleep(3000); } }
Yanıtlar
-
private void Progress2() { PleaseWait pw = new PleaseWait(lblGuardianNameSurname.Text); pw.Show(); pw.Messages(1); Thread thread1 = new Thread(new ThreadStart(Process)); thread1.Start(); while (thread1.IsAlive) Application.DoEvents(); pw.Messages(actionTypeId); Timer t = new Timer() { Interval = 3000 }; t.Tick += delegate { pw.Hide(); t.Stop(); }; t.Start(); }
- Düzenleyen Abdullah Osman İnal 28 Ekim 2015 Çarşamba 12:45
- Yanıt Olarak İşaretleyen Enes CANSIZ 30 Ekim 2015 Cuma 14:37
Tüm Yanıtlar
-
-
-
hayır algılıyor ama siz görmüyorsunuz. GUI o sırada thread.sleep te. sonrasında da kapatıyorsunuz.
Şu şekilde yapabilirsiniz.
private void Progress2() { PleaseWait pw = new PleaseWait(lblGuardianNameSurname.Text); pw.Show(); Thread thread1 = new Thread(new ThreadStart(Process)); thread1.Start(); while (thread1.IsAlive) Application.DoEvents(); pw.Messages(actionTypeId); Timer t = new Timer() { Interval = 3000 }; t.Tick += delegate { pw.Hide(); t.Stop(); }; t.Start(); }
-
-
private void Progress2() { PleaseWait pw = new PleaseWait(lblGuardianNameSurname.Text); pw.Show(); pw.Messages(1); Thread thread1 = new Thread(new ThreadStart(Process)); thread1.Start(); while (thread1.IsAlive) Application.DoEvents(); pw.Messages(actionTypeId); Timer t = new Timer() { Interval = 3000 }; t.Tick += delegate { pw.Hide(); t.Stop(); }; t.Start(); }
- Düzenleyen Abdullah Osman İnal 28 Ekim 2015 Çarşamba 12:45
- Yanıt Olarak İşaretleyen Enes CANSIZ 30 Ekim 2015 Cuma 14:37
-
-
Önce hoş geldiniz yazısını gösterip 3 saniye sonra lütfen bekleyiniz mi yapmak istiyorsunuz, ?
Yapmak istediğiniz şeyin algoritmasını yazın.
Ben sizin yazdığınız kodun algoritmasını yazıyorum:
- pw formunu göster
- process methoduna dallanıyor.
- process methodunun bitmesi bekleniyor.
- pw.setMessage(action type id neyse onu yapar switch case bir işi yok orada)
- 3sn bekle
- zaten dallamanın bitmesini bekliyorsunuz, niye bekliyorsunuz bilmiyoruz ?
- zaten bir değişken var nereden geldiği belli değil onun sonucuna göre 1(bir) iş yapılıyor. İki iş hiç yok sizin kodda.
Ne yapmak istediğinizi yazarsanız yardımcı olmaya çalışalım.
- Düzenleyen Abdullah Osman İnal 28 Ekim 2015 Çarşamba 13:02
-
Ben sorunu açıkladım ilk yazımda fakat sizinde anlayabilmeniz için tekrar açıklayayım.
Algoritması ;
1. Pw formunu göster, (Form üzerindeki Label'da "Lütfen bekleyiniz.." yazısı yazıyor.)
2. Process methodunu çalıştır ve bitir,(Thread ile)
3. Pw form üzerindeki label'a "HOŞGELDİNİZ" yaz ve ekranda bunu göster,
4. Bitir
Proccess methodunda database'de işlemler yapıyorum ve bu işlemleri yaparken ekranda bu yazıları göstermek istiyorum, ayrıca actionTypeId degişkenin ne geldigi nerden geldigi önemli degil burda if switch case kullanmakta veya kullanmamakta önemli degil, benim yapmak istediğim, Lütfen Bekleyinizz.. yazısını gösterip Process methodunu çalıştırıp bittiğinde ise, Lütfen Bekleyiniz.. yazısını HOŞGELDİNİZ olarak degiştirmek.
-
actionTypeId'de hata olabilir mi?
private void Progress2() { PleaseWait pw = new PleaseWait(lblGuardianNameSurname.Text); pw.Show(); Thread thread1 = new Thread(new ThreadStart(Process)); thread1.Start(); while (thread1.IsAlive) Application.DoEvents(); pw.Messages(1); Timer t = new Timer() { Interval = 3000 }; t.Tick += delegate { pw.Hide(); t.Stop(); }; t.Start(); }
-
-
Bu söylemek istemiyorum ama bende çalışıyor bir hata olmalı
Şöyle buyurun örnek:
-
Öncelikle Invoke kullanmalısınız bunu belirteyim.
Eğer .Net 4.5 yada üzerini kullanıyorsanız hiç Thread ile uğraşmayın Task'lar ile rahatlıkla yaparsınız bu işlemi. Aşağıda iki şekilde de örnek veriyorum.
Thread ile yapımı.
Form frm1 = new Form(); var button = new Button(){Text = "Form2 Aç"}; button.Click+= (sender, args) => { Form frm2 = new Form(); var label = new Label(); label.Text = "Çalışıyor.."; frm2.Controls.Add(label); frm2.Show(); Thread tr = new Thread(new ThreadStart(()=> { for (int i = 0; i < 100; i++) { Thread.Sleep(100); frm2.Invoke(new Action(()=>label.Text = "Yapılıyor.. " + i)); } })); tr.Start(); while (tr.IsAlive) { Application.DoEvents(); } label.Text = "Tamamlandı"; }; frm1.Controls.Add(button); frm1.ShowDialog();
Task ile yapımı
Form frm1 = new Form(); var button = new Button(){Text = "Form2 Aç"}; button.Click+= async (sender, args) => { Form frm2 = new Form(); var label = new Label(); label.Text = "Çalışıyor.."; frm2.Controls.Add(label); frm2.Show(); Task task = Task.Factory.StartNew(()=> { for (int i = 0; i < 100; i++) { Thread.Sleep(50); frm2.Invoke(new Action(()=>label.Text = "Yapılıyor.. " + i)); } }); await task; label.Text = "Tamamlandı"; }; frm1.Controls.Add(button); frm1.ShowDialog();
- Yanıt Olarak İşaretleyen Serkan Canseven 30 Ekim 2015 Cuma 14:35
- Yanıt İşaretini Geri Alan Enes CANSIZ 30 Ekim 2015 Cuma 14:37