-1

ルーチンが を介して定期的に実行されてSystem.Threading.Timerいる場合、ホスト アプリケーションの終了によってこのルーチンが途中で中止されないようにするにはどうすればよいですか?

4

3 に答える 3

0

このコードにより、メイン スレッドが 10 秒間ブロックされ、キューに入れられたタイマー コールバックが終了するのを待機します。これは、ホスト アプリケーションの終了ポイントで実行できます。

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

アプリケーションが終了している場合は、おそらく何もできません。ただし、非バックグラウンド スレッドを開いた場合は、終了 (メイン ウィンドウを閉じるなど) することで、暗黙的なアプリケーションの終了を防ぐことができます。main

System.Threading.Timerタイマーをそのスレッドで実行することはできますが、スレッド プール スレッド (バックグラウンド スレッド) で実行されるため、 では実行できません。たとえば、そのスレッドでディスパッチャを開始し、DispatcherTimer(WPF を使用している場合) を実行できます。

于 2012-11-17T22:51:15.343 に答える
0

スレッドが異常終了しないことを保証する方法はありません。予想外の電源障害、ユーザーがタスク マネージャーでアプリケーションを終了する、スレッドをクラッシュさせるプログラムのバグなど、さまざまな問題が発生する可能性があります。

中断された場合にデータベースが破損したり一貫性のない状態のままになる多段階のデータベース更新を行っている場合は、トランザクションを使用する必要があります。

于 2012-11-18T03:41:56.603 に答える