これは、System.Timers.Timerを使用する正しい方法ですか? 私はタイマーを作成し、Elapsedイベントで呼び出される間隔とメソッドを設定します。System.Timers.Timerライフサイクル
double ms = 1000;
var t = new System.Timers.Timer(ms);
t.AutoReset = false;
t.Elapsed += (sender, e) => { runTask(); };
t.Start();
次は何ですか?タイマーでコールを処分する必要がありますか?私はできないと思う、またはElapsedイベントは起こりません。 Timerをグローバル変数に登録して、参照を失わないようにする必要があります。そのため、Elapsedが呼び出される前にGCがタイマーを破棄することができますか? もしそうなら、Elapsedイベントが処理された(つまり、タスクが実行された)ときに、どのようにTimerを処分できますか?
これは、タイマーがフォームAで作成され、ユーザーがアプリケーションを終了した場合(タスクがフォームコントロールにアクセスしようとしていると例外が発生します。 –
@Mohib Sheth:私が答えたのは、タイマーが破棄されるのを防ぐ方法です。停止するには、Stop()を呼び出す必要があります。必要に応じてイベントハンドラの登録を解除することができればさらに優れています。 Alexisはそれを説明しました.... –
あなたが引用したコードコメントは、Timerのドキュメントにはもう存在しません。 –