簡単に言えば、ミリ秒単位の精度で.Netに正確なタイマーが必要です。つまり、10ミリ秒が経過したときにイベントを発生させるように指示した場合、+-1ミリ秒でそうする必要があります。組み込みの .Net Timer クラスの精度は +-16ms のようですが、これは私のアプリケーションでは受け入れられません。
この記事を見つけましたhttp://www.codeproject.com/Articles/98346/Microsecond-and-Millisecond-NET-Timerこれは、まさに必要なものであるタイマーのコードを提供します(さらに-マイクロ秒単位の精度があります) .
ただし、問題は、OnTimer に相当するものが別のスレッドで実行されているように見えることです。したがって、そうするコードを追加すると、次のようになります。
label1.Text = "Hello World";
例外が発生するため、実際には次のように記述する必要があります。
Invoke( new MethodInvoker(() =>{label1.Text = "Hello World";}));
これは、私が理解していることから、OnTimer イベントがタイマーのスレッドから発生するためです。ここでは、間隔を超えるのに十分な時間が経過するまで時間が経過し、次の OnTimer イベントが発生します。.Net Timer にはそのような問題はありません。.Net Timer の OnTimer では、コントロールのメンバーを自由に変更できます。
質問: タイマーがメイン スレッドで OnTimer イベントを実行するには、何を変更すればよいですか? 「Invoke」を追加するのが唯一の選択肢ですか?