धागे के साथ लड़ना बंद करो

क्या कोई देख सकता है कि समस्या कहां है?

UserActivityHook actHook;

private void Form1_Load(object sender, EventArgs e)
{
    actHook = new UserActivityHook();
    actHook.KeyPress += new KeyPressEventHandler(klawisze);
    actHook.KeyDown += new KeyEventHandler(klawisze2);
    actHook.Start();

}

public void pw()
{
    while (!stopIt)
    {
        SetCursorPos(576, 363);
        Thread.Sleep(50);
        SetCursorPos(650, 363);
        Thread.Sleep(50);
        SetCursorPos(650, 430);
        Thread.Sleep(50);
    }   
}
public void Stop()
{
    stopIt = true;
}
private volatile bool stopIt;

public void dw()
{
    while (!stopIt)
    {
        SetCursorPos(860, 350);
        Thread.Sleep(50);
        SetCursorPos(890, 350);
        Thread.Sleep(50);
        SetCursorPos(890, 380);
        Thread.Sleep(50);
    }
}

public void klawisze(object sender, KeyPressEventArgs e)
{
    Thread w1 = new Thread(new ThreadStart(pw));
    Thread w2 = new Thread(new ThreadStart(dw));

    try
    {
        if (e.KeyChar == 21) //CTRL + SHIFT + U
        {       //1

            stopIt = false;
            w1.Start();
            if (e.KeyChar == 9)
            {
                Stop();
                w1.Join();
            }
        }
        if (e.KeyChar == 9) //CTRL + SHIFT + I
        {   //2

            stopIt = false;
            w2.Start();
            if (e.KeyChar == 21)
            {
                Stop();
                w2.Join();
            }
        }
    }

जब मैं दूसरी हॉटकी दबाता हूं तो मुझे देरी के साथ त्रिकोण खींचना चाहिए और दूसरी त्रिकोण (+ रोकें 1) खींचें जब मैं दूसरी हॉटकी दबाता हूं, लेकिन इसके ड्रॉ 2 त्रिकोण एक ही समय में ... मैं उलझन में हूं ...

0
यह बुरी तरह टूटा कोड है। आपके पास दो थ्रेड हैं जो कर्सर को स्थानांतरित करना चाहते हैं, न ही जीतने का एक अच्छा मौका है। पहला अगर (ई। केकर == 9) कथन कभी भी सत्य नहीं हो सकता है, तो आपने पहले से ही जांच की है कि यह 21 है। तो धागे कभी नहीं रुकते हैं।
जोड़ा लेखक Hans Passant, स्रोत
"Klawisze2" क्या करता है? ऐसा लगता है कि आप अपने वर्तमान धागे को कभी नहीं रोकते और हमेशा नए धागे बनाते हैं। इसके अलावा आपकी इच्छा असंभव है
जोड़ा लेखक BudBrot, स्रोत

1 उत्तर

आपके कारण <कोड> यदि क्वेरी को रोकें() या जुड़ें को कॉल करना असंभव है। इसके बजाय यह एक नया थ्रेड शुरू करेगा। इसके अलावा आपके थ्रेड स्थानीय हैं और आप हमेशा नए बनाते हैं, इसलिए आप उन्हें वैश्विक रूप से रोक नहीं सकते हैं

                if (e.KeyChar == 21) 
                {       

                    stopIt = false;
                    w1.Start();
                    if (e.KeyChar == 9)//How should this work? e.Keychar is 21 if the first query passed
                    {
                   //This will never be executed
                        Stop();
                        w1.Join();
                    }
                }

संपादित करें: आप पूछते हैं

private static Thread w1;
private static Thread w2;

 public void klawisze(object sender, KeyPressEventArgs e)
    {


        try
        {
            if (e.KeyChar == 21) //CTRL + SHIFT + U
            {   
                if (w2 != null)
                {    
                       Stop();
                       w2.Join();
                       while (w2.IsAlive)
                       {
                              Thread.Sleep(100);
                       }
                }
                stopIt = false;
                w1 = new Thread(new ThreadStart(pw));
                w1.Start();
            }
            if (e.KeyChar == 9) //CTRL + SHIFT + I
            {   //2
                if (w1 != null)
                { 
                       Stop();
                       w1.Join();
                       while (w1.IsAlive)
                       {
                              Thread.Sleep(100);
                       }
                       stopIt = false;
                }
                w2 = new Thread(new ThreadStart(dw));
                w2.Start();
            }
        }
0
जोड़ा
तो मैं इसे कैसे बदल सकता हूं?
जोड़ा लेखक user3057699, स्रोत
thx अब काम कर रहा है;)
जोड़ा लेखक user3057699, स्रोत
@ user3057699 मैंने एक संभावित समाधान जोड़ा। यह शायद मेरे मोबाइल पर लिखा, बिल्कुल सही नहीं है
जोड़ा लेखक BudBrot, स्रोत