C# 线程应该停止,但它没有停止

C# 线程应该停止,但它没有停止,c#,multithreading,winforms,C#,Multithreading,Winforms,现在我有了这个:钩住的热键和一个volatile bool,它正在检查while循环 UserActivityHook actHook; private void Form1_Load(object sender, EventArgs e) { actHook = new UserActivityHook(); actHook.KeyPress += new KeyPressEventHandler(klawisze); actHook.KeyDown += new Ke

现在我有了这个:钩住的热键和一个
volatile bool
,它正在检查while循环

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();
            }
        }
    }

当我按下第一个热键,然后同时按下第二个画2个三角形时,它并没有关闭第一个画。这里怎么了

我希望这就是你问题的答案。你应该做另一个线程,否则这将无法正常工作。但是,我会将布尔值“firstLoop”从winform发送到另一个线程。我的解决方案不是100%正确

Boolean firstLoop = false;

if (e.KeyChar == 21) //CTRL + SHIFT + U
{
    firstLoop = true

    while (firstLoop == true)
    {        
          SetCursorPos(576, 363);
          Thread.Sleep(50);
          SetCursorPos(650, 363);
          Thread.Sleep(50);
          SetCursorPos(650, 430);
          Thread.Sleep(50);
     }
}
if (e.KeyChar == 9) //CTRL + SHIFT + I
{  
    firstLoop = false;

    while (firstLoop == false)
    {
       SetCursorPos(860, 350);
       Thread.Sleep(50);
       SetCursorPos(890, 350);
       Thread.Sleep(50);
       SetCursorPos(890, 380);
       Thread.Sleep(50);
    }
}

嗯,我没有看到任何环?你也可以发布它们吗?编辑:)thx for Reply这是一个糟糕的代码放置
线程。在UI线程上执行Sleep
调用。你想在这里干什么?也许有更好的解决办法吗?@Enigmativity我知道它的可怕代码。。。我想要这样:当我按下第一个热键时,或者经常“写”一个三角形,当我按下第二个热键时,它会在其他地方“写”另一个三角形(当第一个热键按下时,会“写”第一个三角形等等),为什么它需要重复画三角形?为什么每行之间都有延迟?你是对的,它不正确。。。你的意思是什么?THXI如果您使用Thread.Sleep(),整个winform都是“锁定”的。要绕过这一点,我将在另一个线程中执行循环。只是我的想法我现在很忙。以下是一些示例
-
-