我的System.Threading.Timer(具有回调)从不可靠地触发。这是我的编程任务的一部分,其中我输入了应该从文本框中运行计时器的时间。
计时器的声明如下:
System.Threading.Timer timer = new System.Threading.Timer(WorkerObject.callback, null, delay, Timeout.Infinite);
而延迟只是一个
int
,它描述了首次触发回调(仅触发一次)的延迟。回调方法是这样的:
public static void callback(Object stateinfo)
{
stop = true;
}
然后,所有操作都将标志设置为true,从而停止循环(实际上,该循环正在由ThreadPool上的线程运行,从而停止了线程)。
循环如下所示:
while (!stop)
{
currentTextbox.Invoke(new Action(delegate()
{
currentTextbox.AppendText((counter++) + Environment.NewLine);
currentTextbox.Update();
}));
}
我的问题是,对于超过5000毫秒的任何延迟,
stop
变量始终为false。有没有一种方法可以“强制”始终触发回调? 最佳答案
您需要保留对计时器的引用。
很有可能计时器对象正在被垃圾回收,这将运行其终结器,从而停止计时器。
因此,只要您需要使计时器保持 Activity 状态,就可以保留引用。