【发布时间】:2013-04-17 07:47:39
【问题描述】:
我在 Windows 窗体中退出线程时遇到问题。
我有经典的 Windows 窗体,它正在运行。我每隔一段时间都需要做一些事情,所以我补充说:
TimerCallback timerDelegate = new TimerCallback(this.TryDoSomething);
int period = 10 * 1000; // to miliseconds
System.Threading.Timer stateTimer = new System.Threading.Timer(timerDelegate, null, period, period);
方法 DoSomething 由几个线程(主线程和这个计时器)调用,所以我是这样介绍的:
private void TryDoSomething(object o)
{
lock (tryDoSomethingMutex)
{
if (this.dataGridView1.InvokeRequired)
{
RefreshCallback d = new RefreshCallback(DoSomething);
this.Invoke(d, new object[] { o });
}
else
{
this.DoSomething(o);
}
}
}
一切正常,直到我的计时器线程刚刚退出并显示消息:
The thread 0x2798 has exited with code 0 (0x0).
同样的事情发生在我的 FileSystemWatcher 上,它也调用了 DoSomething 方法。 这两个事件都是独立的,并且在随机时间退出(至少我没有找到任何规则)
造成这种情况的原因是什么,我该如何预防?
【问题讨论】:
-
这不是错误,它只是表明线程已完成执行。
-
直到你的时间线程退出?所以不是说要退出吗?设置dueTime的不是你吗?
-
这就是问题所在——我不是。计时器被设置为每隔一段时间做一些事情,然后在随机时间突然退出(但没有任何错误)。
标签: c# .net multithreading winforms