0

要点を簡潔に説明します。私は基本的に、タイマーを取得し、タイマーがいつ終了したかを確認し、最後に何かを実行してからループする方法が必要です。例(このコードは深刻ではなく、単なるサンプルコードです):

Timer1.start();

If (timer1.TimeRanOut) {

Timer2.start()

}

または、GUI がフリーズせずにタイマーを一時停止する別の方法 (いくつかのことを速いペースで実行すると、フリーズが邪魔になります)。次のように、プロセス全体をループすることで、これをより複雑にします。

if (Checkbox1.checked == true; )
{
Timer1.start();

Next If (timer1.TimeRanOut) {

Timer2.start()

}

Next If (timer2.TimeRanOut) {

Timer3.start()

}

等々。解決策はありますか?

4

2 に答える 2

0

タスクを使用することをお勧めします。最初のタスクが終了したときに実行する新しいタスクを割り当てるために continueWith を設定するよりも、何かを行うタスクを設定します (タイマーよりも X 秒待つことができます)。詳細については、こちらをご覧ください: http://msdn.microsoft.com/en-us/library/dd537612.aspx

ところで、UI スレッド自体で重い計算を実行するべきではありません。タスクを使用することにした場合は、それで問題ありません。それ以外の場合は、バックグラウンド スレッドを作成し、そこで作業を行う必要があります。

編集:

OP からのいくつかの説明の後、基本または UI とバックグラウンド スレッドの操作について説明します。winforms/WPF アプリケーションを実行すると、すべてのユーザー インターフェイス イベントは単一のスレッド (UI スレッド) で処理されます。すべてのイベントを調べて処理します。長い計算がこのスレッドを占有すると、UI が「スタック」して反応しなくなります。参照: 重い計算で UI がフリーズする

そのため、長い計算はバックグラウンドで別のスレッドで実行する必要があります。上記の投稿の回答には、これを行う方法の例があります。

于 2013-06-12T04:26:09.097 に答える
0

System.Threading.Timerを使用できます。次に、その単発機能を利用します (変更方法を参照)。そのため、複数のタイマーを連鎖させることができます。

このタイマーのコールバックはスレッド プールで実行されるため、UI はフリーズしません。

于 2013-06-12T07:20:09.187 に答える