如果例程通过System.Threading.Timer
定期运行,可以采取哪些措施来防止此例程因主机应用程序终止而中途中止?
答案 0 :(得分:0)
好吧,如果申请终止,你不可能做任何事情;但是,如果打开非后台线程,可以阻止隐式应用程序终止,退出main
(关闭主窗口等)。
您可以让计时器在该线程上运行,但是您无法使用System.Threading.Timer
,因为它在线程池线程(后台线程)上运行。你可以。 G。在该线程上启动一个调度程序并运行DispatcherTimer
(如果您使用的是WPF)。
答案 1 :(得分:0)
无法保证您的线程不会异常终止。任何数量的事情都可能出错:意外停电,用户使用任务管理器终止应用程序,或者程序中发生崩溃线程的错误只有三种可能。
如果您正在进行多阶段数据库更新,如果中断,将使您的数据库处于损坏或不一致状态,那么您应该使用事务。
答案 2 :(得分:0)
此代码应导致主线程阻塞10秒钟,等待任何排队的计时器回调完成。这可以在主机应用程序的退出点运行。
Dim waitHnd As WaitHandle = New AutoResetEvent(False)
Timer1.Dispose(waitHnd)
waitHnd.WaitOne(10000)