-1

如果例程通过 a 定期运行System.Threading.Timer,可以做些什么来防止该例程由于主机应用程序的终止而中途中止?

4

3 回答 3

0

好吧,如果应用程序终止,您将无法做任何事情;但是,如果您打开非后台线程,则可以通过退出(关闭主窗口等)来防止隐式应用程序终止。main

您可以使计时器在该线程上运行,但是您不能使用 来执行此操作System.Threading.Timer,因为它在线程池线程(后台线程)上运行。例如,您可以在该线程上启动一个调度程序并运行一个DispatcherTimer(如果您使用的是 WPF)。

于 2012-11-17T22:51:15.343 回答
0

没有办法保证你的线程不会被异常终止。任何数量的事情都可能出错:意外的电源故障、用户使用任务管理器终止应用程序或程序中的错误导致线程崩溃只是三种可能性。

如果您正在进行多阶段数据库更新,如果被中断,会使您的数据库处于损坏或不一致的状态,那么您应该使用事务。

于 2012-11-18T03:41:56.603 回答
0

此代码应导致主线程阻塞 10 秒,等待任何排队的计时器回调完成。这可以在宿主应用程序的出口点运行。

Dim waitHnd As WaitHandle = New AutoResetEvent(False)
Timer1.Dispose(waitHnd)
waitHnd.WaitOne(10000)
于 2012-11-20T14:15:47.983 回答