3


0

BackgroundWorkerから開始したタイマーは機能しますか?

タイムアウトになったときに関連する機能をトリガーしないタイマーがあります。 「ティック」イベントを設定しました。 「Interval」プロパティを「12000」に設定し、「myTimerObject.Start();」を実行しました。

ただし、このタイマーは別のスレッド(「BackgroundWorker」のどこか)で設定しました。 私の理論では、タイマーは正しく起動しているように見えますが、「BackgroundWorker」に関連付けられた「DoWork」関数の実行が完了するとスレッドが破棄され、これによりタイマーイベントも破棄されます。

これは本当ですか? タイマーイベントが発生しない他の考えられる理由はありますか?

1 Answer


4


Pieter、問題はTimerの起動元のスレッドではなく、実際の参照を保持していないためにガベージコレクションが行われるという事実です。

タイマーのhttp://msdn.microsoft.com/en-us/library/system.threading.timer.aspx[MSDNドキュメント]から(「解説」の注を参照):

_ タイマーを使用している限り、タイマーへの参照を保持する必要があります。 すべての管理対象オブジェクトと同様に、タイマーは、それへの参照がない場合、ガベージコレクションの対象となります。 タイマーがまだアクティブであるという事実は、タイマーの収集を妨げません。 _