我在form1的load事件函数中创建并启动了一个线程:
private void Form1_Load(object sender, EventArgs e)
{
     Thread getnewdataThread = new Thread(new ThreadStart(GetNewData));
     getnewdataThread.Start();
}
下面是我线程函数:
private void GetNewData()
{
      ...
      while ( !formclosed )
      {
          GetNewDataEvent.WaitOne();
          ...       }
 }为了让线程在关于主窗口时退出,使用了bool formclosed标志,并在FormClosed事件函数中设置为ture。
问题来了,当我用VS2010 调试运行时,程序是正常的,当我关闭窗口时,调试环境并没有退出(以前调试时,关闭窗口系统就会自动退出调试环境),这个问题是线程还没用退出?(因为去掉线程就正常了),还是本来VS2010就存在这个bug?请高手解答啊  谢谢!!!!!

解决方案 »

  1.   

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

  2.   

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

  3.   

    我是在 Form1_Load 函数里创建的线程,在FormClosing事件不能调用该线程的Abort方法是不是我创建线程的位置有问题呢,应该怎么做比较合理啊?我刚刚试试了 就是那个WaitOne的原因
      

  4.   

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

  5.   

    可以用WaitOne(timeout),也可以用两个事件,还可以投机利用一下GetNewDataEvent(见例子):private void GetNewData()
    {
          while(true)
          {
              GetNewDataEvent.WaitOne();
              if(formclosed) break;        //<---
              ...
          }
    }
    private void OnFormClosed(...)
    {
          formclosed = true;
          GetNewDataEvent.Set();           //<---
    }
      

  6.   

    Thread Test = new Thread(new StreadStart(TestFunction));
    Test.IsBackground = true;
    Test.start();
    这样你试试、、这样的话 你退出程序后打开的线程也就会退出了
      

  7.   

    getnewdataThread .Abort();
    getnewdataThread.Join(0);
    Environment.Exit(0);