私はいくつかのタスクを実行するために使用しているバックグラウンド ワーカーを持っています。期待どおりに動作します。ただし、追加して bw を開始し、ページの読み込み後 10 秒のようにカウントするタイマーがあります。timer.Interval を 10000 に設定しました。タイマーには以下のようにティック イベントがあります。
private DateTime dateETA;
private void TimerEventHandler(object sender, EventArgs e)
{
while (bw.CancellationPending ==false)
{
if (timerPro.Enabled == true)
{
dateETA = Convert.ToDateTime("1/1/0001 00:00:00");
dateETA = dateETA.AddMilliseconds(timerPro.Interval);
lblETA.Visible = true;
lblETA.Text = "Elapsed Time : " + Convert.ToString(dateETA.TimeOfDay);
// SetText("timer");
}
}
}
私のバックグラウンド ワーカー非同期はページ コンストラクター メソッド上にあるため、ロード時に実行されます。以下のように
if (bw.IsBusy != true)
{
this.btnPause.Enabled = true;
this.btnStop.Enabled = true;
btnStart.Enabled = false;
// timerPro.Start();
bw.RunWorkerAsync();
}
タスクと一緒にタイマーを開始したかったので、 bw.async の前に置きました。次に、バックグラウンド ワーカーの dowork メソッドの前または内部に置くと、タイマー ティック イベントが発生しないことに気付きました。bw スレッドがイベントの発生をブロックしている可能性があると考えた後、dowork 内で以下のような呼び出しメソッドを使用して、タイマーを開始するか、タイマーの tick イベントをトリガーします。
this.Invoke((MethodInvoker)(() => { timerPro.Enabled = true; }));
それでも発火しません。私は混乱しており、助けや代替手段をいただければ幸いです。