.NET バックグラウンドワーカーで while ループを実行しています。Timers.Timer が 0 になったらループを終了させたいです。
問題は、別のスレッド (backgroundworker) で作業しているため、タイマーを同じスレッドでインスタンス化する必要があることです。したがって、プライベート ブール値の timer_Elapsed を設定することはできません。ブールスローイベントの参照を与える方法を私は知りません。
コード例:
private bool timer_Elapsed = false;
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
System.Timers.Timer timer = new System.Timers.Timer();
Set_Timer(timer);
timer.Start();
while(timer_Elapsed) //Has to be a boolean that indicates if timer elapsed
{
this.Do_Proces();
}
}
private void Set_Timer(System.Timers.Timer timer)
{
timer.Interval = 200;
timer.Elapsed += new ElapsedEventHandler(timer_ElapsedEvent);
}
private void timer_ElapsedEvent(object source, ElapsedEventArgs e)
{
timer_Elapsed = true; //I can't set my private boolean since it got instantiated in another thread
}
コード内の特定の質問。私はこの種のもので新しいです。助言がありますか?前もって感謝します
編集:明確にするために、Do_Proces() を 200 ミリ秒間実行したいのですが、その時間が経過したら停止させたいと思います。200 ミリ秒後に停止したら、backgroundWorker で生成されたデータで GUI を更新したいと考えています。次に、ユーザーがプロセスを停止するかどうかを確認します。そうでない場合は、もう一度実行します.スレッドを再起動する必要があるため、タイマーを使用します。これはメインスレッドにも影響を与え、ユーザーに影響を与えますひどく経験します。