現時点では、Callaback プロシージャ内に For ループがあります。
private void InitializeComponent()
{
var timer = new System.Threading.Timer(TimerProc, null, 60000, 60000);
}
public void TimerProc(object state)
{
for (int i = 0; i <= 6; i++)
{
//Do something here
}
}
TimerProc は、60000 ミリ秒ごとに繰り返すように設定しているにもかかわらず、1 回しか起動しません。ループ内の操作は、最初の完了後に実行されなくなったようです。
ただし、For ループを削除して、コンソール ラインへの出力やテキスト ファイルへの書き込みなどの他のアクションを実行すると、TimerProc は期待どおりに繰り返されます。
これはなぜですか? また、Callback プロシージャ内のループが最初の起動後に実行を停止するのはなぜですか?
while(true) 無限ループを使用し、Thread.Timer を使用して x ミリ秒後にプロセスを一時停止することで回避策を作成しました。
while ループを使用した新しい vised コードは次のようになります。
private void InitializeComponent()
{
processthread = new Thread(new ThreadStart(DoSomething));
processthread.Start();
}
public void DoSomething()
{
while(true)
{
for (int i = 0; i <= 6; i++)
{
//do something here
}
Thread.Sleep(5000);
}
}
System.Thread.Timer のコールバック プロシージャがループを処理できない理由を知りたいだけです。
乾杯、
スタンリー