我的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 状态,就可以保留引用。

10-02 02:00
查看更多