2012-10-15 68 views
0

我正在使用Windows窗体应用程序进行我的线程演示。当我点击button1时,它会启动线程并递归地执行一项工作。Windows窗体应用程序,线程不会停止

这里窗体不会像我预期的那样挂起。我想在点击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方法不会触及指针。我认为,因为线程保持繁忙。

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

+0

定义“将无法正常工作” - 到底发生了什么和什么是你期待发生什么? – Justin

+0

对不起。我用定义来编辑帖子。 Tx发表评论。 :) – devan

+0

@devan:什么指针? – dotNETbeginner

回答

6

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

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

简单的例子:

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  
    } 
} 
+0

可能不是一个好主意来杀死一个线程,但它是不切实际的检查你的'全局变量'每个方法内部的方法,特别是当方法太长,并且主要不依赖于任何循环构造时。 – dotNETbeginner

+0

你的回复。但这种方式没有用,因为button2_click方法不会被执行者击中。我认为这是其他问题。 – devan

+0

@devan Button1启动新线程,当您单击button2时,您将变量分配给另一个线程可见的变量。这里有什么问题? – Leri

相关问题