• 10-01-2020, 22:37:11
    #1
    Aşşağıdaki SS'de gördüğünüz kırmızı kare yerde label'ım var. ve onun altındaki gördüğünüz progressBar'ım
    Yapmak istediğim olay ise ProgressBar %20 ye gelene kadar Label da "SUNUCUYA BAĞLANILIYOR"
    %20 den büyükse 40 dan küçükse "PROGRAM AÇILIYOR" gibisinden progressbar'ın Value sine göre Label daki Text i değiştirmek istiyorum.
    if denedim fakat başaramadım yardımcı olabilecek var ise sevinirim.

  • 10-01-2020, 22:57:23
    #2
    ProgressBar değerinin maksimum değere ulaşması koşuluyla bir while döngüsü içerisinde sürekli değeri arttırıp aynı zamanda kontrol edeceksin ve istediğin mesajı verebilirisn bu şekilde
  • 10-01-2020, 22:59:04
    #3
    Blacksheep adlı üyeden alıntı: mesajı görüntüle
    ProgressBar değerinin maksimum değere ulaşması koşuluyla bir while döngüsü içerisinde sürekli değeri arttırıp aynı zamanda kontrol edeceksin ve istediğin mesajı verebilirisn bu şekilde
    Mantıklı olan bu başka bir alternatif de progressbar’ı aktif ettikten sonra timer ile % kontrolu yaparak if ile istediğin yazıyı yazdır değiştir.
  • 10-01-2020, 23:13:46
    #4
    Gui threadını uyutuyorsunuz sanırım. Program o sürelerde yanıt vermez ve controllerdeki güncellemeleri gerçekleştirmez. Farklı bir thread oluşturup, progressbar ve label değerini invoke ile değiştirmeyi deneyin. Yapamazsanız özel mesajdan ulaşırsanız yardımcı olurum.
  • 10-01-2020, 23:18:53
    #5
    pr1d3 adlı üyeden alıntı: mesajı görüntüle
    Gui threadını uyutuyorsunuz sanırım. Program o sürelerde yanıt vermez ve controllerdeki güncellemeleri gerçekleştirmez. Farklı bir thread oluşturup, progressbar ve label değerini invoke ile değiştirmeyi deneyin. Yapamazsanız özel mesajdan ulaşırsanız yardımcı olurum.
    Onu da bir gecikme metodu ile çözebiliriz
     private void Gecikme(double saniye)//Gecikme metodu
    {
    if (saniye < 1) return;
    DateTime _desired = DateTime.Now.AddSeconds(saniye);
    while (DateTime.Now < _desired)
    {
    System.Windows.Forms.Application.DoEvents();
    }
            }
    Thread.Sleep yerine Gecikme(1); gibi bir kullanım da iş görecektir.
  • 10-01-2020, 23:25:01
    #6
    Blacksheep adlı üyeden alıntı: mesajı görüntüle
    Onu da bir gecikme metodu ile çözebiliriz
     private void Gecikme(double saniye)//Gecikme metodu
    {
    if (saniye < 1) return;
    DateTime _desired = DateTime.Now.AddSeconds(saniye);
    while (DateTime.Now < _desired)
    {
    System.Windows.Forms.Application.DoEvents();
    }
            }
    Thread.Sleep yerine Gecikme(1); gibi bir kullanım da iş görecektir.
    Evet işe yarayabilir ama bence çok verimsiz bir yöntem, cpu kullanımı o döngüde aşırı artar ve gui sürekli işlem yaptığı için kasar.
  • 10-01-2020, 23:27:49
    #7
    pr1d3 adlı üyeden alıntı: mesajı görüntüle
    Gui threadını uyutuyorsunuz sanırım. Program o sürelerde yanıt vermez ve controllerdeki güncellemeleri gerçekleştirmez. Farklı bir thread oluşturup, progressbar ve label değerini invoke ile değiştirmeyi deneyin. Yapamazsanız özel mesajdan ulaşırsanız yardımcı olurum.
    Şu anda çalışmamasının sebebi thread'ler mi peki ?
  • 10-01-2020, 23:33:32
    #8
    mbinbasi adlı üyeden alıntı: mesajı görüntüle
    Şu anda çalışmamasının sebebi thread'ler mi peki ?
    Evet, aslında kod değişimleri yapıyor ama siz gui işlemlerini gerçekleştiren main threadi uyuttuğunuz için gui mesaj döngüsündeki işlemlerde duruyor ve gerçekleşmiyor.
  • 10-01-2020, 23:47:23
    #9
    pr1d3 adlı üyeden alıntı: mesajı görüntüle
    Evet, aslında kod değişimleri yapıyor ama siz gui işlemlerini gerçekleştiren main threadi uyuttuğunuz için gui mesaj döngüsündeki işlemlerde duruyor ve gerçekleşmiyor.
    Hocam bağlanıp 30 saniyede çözdü olayı eline sağlık.