私のアプリケーションでは、Timer
の2つを使用しています。ここに宣言:タイマは停止後に起動しません
DispatcherTimer timer1 = new DispatcherTimer();
DispatcherTimer timer2 = new DispatcherTimer();
BackgroundWorker worker1 = new BackgroundWorker();
BackgroundWorker worker2= new BackgroundWorker();
私はtimer1
を使用するため、ファイルの内容を確認し、別のBackgroundWorker
を実行するためのBackgroundWorker
とtimer2
と重い方法を実行します。私はBackgroundWorkers
にイベントを割り当てるこのように
:
worker1.DoWork += worker_DoWork;
worker1.RunWorkerCompleted += worker_RunWorkerCompleted;
worker1.WorkerSupportsCancellation = true;
worker2.DoWork += worker_DoWork2;
worker2.RunWorkerCompleted += worker_RunWorkerCompleted2;
worker2.WorkerSupportsCancellation = true;
今timer1
はBackgroundWorker
重方式を各15分の実行ので15 minutes
の範囲を有します。 timer2
の範囲は1 second
です。 timer1
はすべて正常に機能しますが、timer2
を追加したときに問題が発生しています。
このタイマーの前に、worker2
でファイルを読み取るメソッドを開始できるようになったので、このファイルにはプロパティがあります。このプロパティが変更された場合、特別なアクティビティを実行する必要があります。ここまで問題ありません。
//This method is called by MainWindow
public ReadFile()
{
//before this I already assigned to timer1 the tick event and start
timer2.Tick -= new EventHandler(Event_Tick);
timer2.Tick += new EventHandler(Event_Tick);
timer2.Interval = new TimeSpan(0, 0, 1);
timer2.Start();
}
は、これは私がここにDoWork
追加する必要はありませんtimer2
private void Event_Tick(object sender, EventArgs e)
{
if (!worker1.IsBusy) //I skip the reading, worker1 is busy
{
timer1.Stop(); //stop the first timer
worker2.RunWorkerAsync();
}
else
{
Console.WriteLine("worker1 is busy!");
}
}
に関連するTick
イベントである、のちょうど解析である:私は何
は以下のとおりです。ファイル、非常に無駄な質問です。あなたは、私は再びtimer1
を開始見て、再びReadFile
メソッドを実行するにはどうすればよい
private void worker_RunWorkerCompleted2(object sender, RunWorkerCompletedEventArgs e)
{
timer1.Start();
ReadFile();
}
:タスクを完了worker2
とき、私はこれをしませんでした。今度はtimer1
がこの間隔に達した場合、15 minutes
が合格したので、DoWork
〜worker1
を実行するtimer1.Tick += new EventHandler(Heavy_Tick);
を実行する必要があります。しかし、timer1
は決して開始しません。
私には分かりませんが、私は何を間違えていますか?
私はあなたの問題は、毎分実行されるこのif:!(!worker1.IsBusy){timer1.Stop(); ' によって引き起こされると思います。もし、次のチェックの前にworker1を起動しなければ、timer1は再び停止するでしょう。 – LocEngineer
@LocEngineer私は 'ReadFile'を呼び出す前に' timer1'を起動しているので、私を信頼して、 timer1.Start() 'が呼び出されます。はい、私は同じですが、私は残念なことに修正プログラムを管理することはできません。 – Heisenberg
'ReadFile'を呼び出すことは一つですが、' ReadFile'はバックグラウンドワーカー 'worker1'を起動しません。そして、それはビジーであることがチェックされます。 – LocEngineer