我在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?请高手解答啊 谢谢!!!!!
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?请高手解答啊 谢谢!!!!!
解决方案 »
- 程序打包小问题,怎么加入自己的背景图片和说明文字?
- 请教用C#如何直接向本机安装的打印机发送打印指令
- WPF checkbox动画
- xml一节点下,有两个子节点,如何同时读到里面的值?
- 一个.net ajax web服务问题 大家帮忙解决
- 关于Graphics.DrawString()
- 手动添加listview到panel里面,listview被panel遮住了,要怎么设置属性阿?
- 无法在一个DATATABLE里面的COLUMN维护一个对别的DATATABLE的引用?(如pointer一样地)
- 怎样在C#画图象并加到web 窗体中?急谢谢大家
- SELECT之后怎么做?
- 再次对于弹出DIV层提问?笨就让自己笨到底。
- 有用过DevExpress组件的么?
该把Thread对象的声明放在load函数外面,对象的创建放在load里面 这样FormClosed就可以调用Abort方法来终止线程了 呵呵 基础不行啊
闹笑话了 ~~
{
while(true)
{
GetNewDataEvent.WaitOne();
if(formclosed) break; //<---
...
}
}
private void OnFormClosed(...)
{
formclosed = true;
GetNewDataEvent.Set(); //<---
}
Test.IsBackground = true;
Test.start();
这样你试试、、这样的话 你退出程序后打开的线程也就会退出了
getnewdataThread.Join(0);
Environment.Exit(0);