4

System.Threading.Timer (コールバックがある) が確実に起動しません。これは、テキスト ボックスからタイマーの実行時間を入力するプログラミングの割り当ての一部です。

タイマーは次のように宣言されます。

System.Threading.Timer timer = new System.Threading.Timer(WorkerObject.callback, null, delay, Timeout.Infinite);

また、遅延はint、コールバックが最初に起動するまでの遅延を表すだけです (1 回だけ起動することになっています)。

コールバック メソッドは次のようになります。

 public static void callback(Object stateinfo)
 {
     stop = true;
 }

そして、ループを停止するフラグを true に設定するだけです (ループは ThreadPool 上のスレッドによって実行され、実際にはスレッドを停止します)。

ループは次のようになります。

while (!stop)
{
    currentTextbox.Invoke(new Action(delegate()
    {
        currentTextbox.AppendText((counter++) + Environment.NewLine);
        currentTextbox.Update();
     }));
}

私の問題は、stop変数が 5000 ミリ秒を超える遅延に対して常に false であることです。コールバックを常に起動するように「強制」する方法はありますか?

4

3 に答える 3

1

ランタイムの Jitter は、おそらくwhile(!stop)条件を に最適化していますwhile(true)stop変数を揮発性としてマークします。

private volatile bool stop = false;
于 2013-09-23T21:49:43.173 に答える