C# Döngüye girdiğinde program donuyor

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Onaylı Üye
Katılım
29 Mar 2019
Mesajlar
55
Tepki puanı
1
Ödüller
6
Yaş
31
7 HİZMET YILI
Selamlar arkadaşlar, yaptığım kod bloğunda döngüye girdiğinde program donuyor stop butonuna tıklayamıyorum bile.
ilk tek döngü yaptım daha sonra kontrolü arttırayım diye iç içe 2 döngü yaptım son hali de bu. Start dediğimde program donuyor döngü çalısıyor yani z2 z2 gönderiyor ama donduğu için stop butonuna tıklayamıyorum.
Yanlısım nerede yardımcı olacak arkadaşlara şimdiden teşekkürler.

C#:
 private void Stop()
        {
            durum = false;

        }

        private void Start()
        {
           while (!durum)
            {
                Thread.Sleep(500);
               
                if  (!durum == false)
                {
                    durum = !durum;
                    MessageBox.Show("False");                                    
                }
                else
                {
                    do
                    {
                        SendKey();
                    } while (!durum);
                }
                break;
             
            }
        }
        private static string SendKey()
        {
            string a = "z2";
            SendKeys.Send(a);
            return (a);
        }
    }
 
CoreCheat CSGO
Griffin Premium
Katılım
10 May 2016
Mesajlar
1,766
Çözümler
5
Tepki puanı
720
Ödüller
14
Yaş
25
Sosyal
10 HİZMET YILI
Thread.Sleep bütün programın arayüzü dahil her şeyi dondurur. Programın mainthreadını da durduruyorsun çünkü UI eventleri filan. Benim şahsen kullandığım
Bağlantıları görmek için lütfen Giriş Yap
. Asenkron programlamaya bakmanı öneririm.
 
Onaylı Üye
Katılım
29 Mar 2019
Mesajlar
55
Tepki puanı
1
Ödüller
6
Yaş
31
7 HİZMET YILI
Thread.Sleep bütün programın arayüzü dahil her şeyi dondurur. Programın mainthreadını da durduruyorsun çünkü UI eventleri filan. Benim şahsen kullandığım
Bağlantıları görmek için lütfen Giriş Yap
. Asenkron programlamaya bakmanı öneririm.
Yanıtınız için teşekkürler. Şuan da asenkron programlama ve farklı thread'ler ile çalışma yapabilir duruma geldim.
 
Tutti mi chiedono perché ho imparato questa lingua
Süper Üye
Katılım
17 Mar 2016
Mesajlar
634
Çözümler
5
Tepki puanı
112
Ödüller
11
10 HİZMET YILI
While zaten gözlemlenebilen bir döngü değil ki, sonuna kadar donarak çalışır en sonda işlemi gerçekleştirirse bırakır yada break atarsan bırakır çalışmayı ardından sonucu görürsün
 
Onaylı Üye
Katılım
18 Ağu 2023
Mesajlar
50
Tepki puanı
1
Ödüller
2
Yaş
28
2 HİZMET YILI
Kodunuzda, Start metodunda while (!durum) ile başlayan bir döngü var. Bu döngü, durum değişkeni false olduğu sürece devam edecek. Ancak, bu değişkenin değerini değiştiren tek yer if (!durum == false) bloğu içinde. Bu blok ise sadece durum değişkeni true olduğunda çalışacak. Yani, bu blok hiçbir zaman çalışmayacak ve durum değişkeni hep false kalacak. Bu da döngünün sonsuza kadar devam etmesine neden olacak.

Bu problemi çözmek için, durum değişkeninin değerini değiştirecek bir mekanizma eklemeniz veya döngü koşulunu daha uygun bir şekilde tanımlamanız gerekir. Ayrıca, döngü içindeki break ifadesinin anlamsız olduğunu da belirtmek isterim. Çünkü bu ifade, döngünün ilk turunda çalışacak ve döngüyü sonlandıracak. Bu da döngünün sadece bir kez çalışmasına neden olacak.
 
aka hernos
Süper Üye
Katılım
30 Ağu 2019
Mesajlar
628
Çözümler
10
Tepki puanı
297
Ödüller
4
Yaş
29
Sosyal
6 HİZMET YILI
if (!durum == false) { durum = !durum; MessageBox.Show("False"); }

Kod bu bloğa hiçbir zaman girmeyecek çünkü sen zaten while(!durum) döngüsünün içindesin ve ek olarak kodu böyle çirkin yazmak yerine (durum !=false) olarak yazman göze daha güzel gelicektir. Ve gelelim neden donduğuna

else { do { SendKey(); } while (!durum); }

Kodumuz döngü içinde direkt bu else bloğunun içine giricektir ve orada onu sınırsız bir while(!durum) döngüsü karşılıyacak yani sen sürekli her milisaniye SendKey() fonksiyonunu çağırıp tuş basma işlevini yapıcaksın buda haliyle donmaya sebep olucaktır. Gerçekten her milisaniye SendKey() fonksiyonunu çağırmak istediğine eminmisin? Eğer öylese en azından o döngünün içine bir Sleep() eklemeni öneririm.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst