0

我正在为我的线程演示使用 Windows 窗体应用程序。当我点击 button1 时,它将启动线程并递归地做一项工作。

在这里,表格不会像我预期的那样挂起。我想在单击 Button2 时停止当前正在运行的线程。但是,这行不通。

        private void button1_Click(object sender, EventArgs e)
        {
            t = new Thread(doWork);          // Kick off a new thread
            t.Start();               
        }

        private  void button2_Click(object sender, EventArgs e)
        {                
            t.Abort();
        }    

        static void doWork()
        {    
            while (true)
            {
              //My work    
            }
        }
      }

.当我调试时,button2_Click 方法不会命中指针。我想是因为线程一直很忙。

如果我在某个地方出错,请纠正我。

4

1 回答 1

9

你不能像这样杀死线程。原因是为了避免在线程中添加锁然后在释放锁之前将其杀死的情况。

您可以创建全局变量并使用它来控制您的线程。

简单示例:

private volatile bool m_StopThread;

private void button1_Click(object sender, EventArgs e)
{
    t = new Thread(doWork);          // Kick off a new thread
    t.Start();               
}

private  void button2_Click(object sender, EventArgs e)
{                
    m_StopThread = true;
}    

static void doWork()
{    
    while (!m_StopThread)
    {
          //My work    
    }
}
于 2012-10-15T11:23:35.433 回答