+ -
当前位置:首页 → 问答吧 → C# winform 多线程编程问题

C# winform 多线程编程问题

时间:2011-12-19

来源:互联网

我在form1的load事件函数中创建并启动了一个线程:
C# code
private void Form1_Load(object sender, EventArgs e)
{
     Thread getnewdataThread = new Thread(new ThreadStart(GetNewData));
     getnewdataThread.Start();
}



下面是我线程函数:
C# code
private void GetNewData()
{
      ...
      while ( !formclosed )
      {
          GetNewDataEvent.WaitOne();
          ...

       }
 }


为了让线程在关于主窗口时退出,使用了bool formclosed标志,并在FormClosed事件函数中设置为ture。


问题来了,当我用VS2010 调试运行时,程序是正常的,当我关闭窗口时,调试环境并没有退出(以前调试时,关闭窗口系统就会自动退出调试环境),这个问题是线程还没用退出?(因为去掉线程就正常了),还是本来VS2010就存在这个bug?

请高手解答啊 谢谢!!!!!


作者: shelllink110   发布时间: 2011-12-19

晕 发完贴后 感觉应该GetNewDataEvent.WaitOne()的问题 我先试试哈

作者: shelllink110   发布时间: 2011-12-19

关闭窗口时调用Stop关闭线程不就可以了

作者: dreamboy0908   发布时间: 2011-12-19

我是在 Form1_Load 函数里创建的线程,在FormClosing事件不能调用该线程的Abort方法

是不是我创建线程的位置有问题呢,应该怎么做比较合理啊?

我刚刚试试了 就是那个WaitOne的原因
引用 2 楼 dreamboy0908 的回复:

关闭窗口时调用Stop关闭线程不就可以了

作者: shelllink110   发布时间: 2011-12-19

晕死 有些地方没用理解清楚啊 
该把Thread对象的声明放在load函数外面,对象的创建放在load里面 这样FormClosed就可以调用Abort方法来终止线程了 呵呵 基础不行啊
闹笑话了 ~~

作者: shelllink110   发布时间: 2011-12-19

相关阅读 更多