0

10 分の時間間隔で system.timers.timer コントロールを使用する winform アプリを作成しました。特定のイベントが発生したときにインクリメントされる整数変数を宣言しました。問題は、整数値が 0 にリセットされることですが、タイマー制御を 1 分に設定すると、正しい結果が表示されます。この奇妙な動作の理由を知っている人はいますか?

私はいくつかの調査を行い、理由の1つはガベージコレクターがこれを担当している可能性があることを発見しましたが、int値はヒープに保存されていますよね? 他の解決策を知っている場合は、アプリ ドメインが閉じられるまで GC できません。アドバイスをお願いします。本当にこれが必要でしたか? 問題は変数が GC によってリセットされていることだと思いますが、GC.KeepAlive(TimerName); も使用しました。

4

1 に答える 1

0

System.Timers.Timerマルチスレッド環境用のタイマーです。MSDN
を参照してください:

Elapsedイベントは ThreadPool スレッドで発生します

System.Windows.Forms.Timer代わりにa を使用してみてください。
ただし、マルチスレッドの動作に関心がある場合は、整数変数SynchronizingObjectと同じスレッドで宣言されているオブジェクトを参照するようにタイマーのプロパティを設定します。

于 2013-11-15T18:03:19.780 に答える