forループは、タイマーが終了するまで待ってから、その後forループを続行します。どのように私はこれを行う必要がありますか?私は&非同期を待ってみました、私は何か間違っています。 今の動作:ループが開始され、タイマーが実行されますが、終了するまで待機しません。それで、それはループし、再びタイマーを起動します。DispatcherTimerが終了するまでforループを一時停止する方法はありますか?
私のプロジェクト以上:電動式ベッドのモーターテスターです。このコードは、モーターが上下に動いている間に実行する必要があります。 私はMVVM、WPF、ADRUINO UNOを使用しています。
誰かが良い提案をしているなら、私は聞いてみたいと思います。 (私の悪い英語を残して申し訳ありません) CODE OF
PIECE:
あなたMVCEよりコード、一見
DispatcherTimer
の唯一の目的は、導入することであるとよりがない限り:
private async void Loop(object sender, EventArgs e)
{
for (int i = 0; i < DOORLOOPTEST.Properties.Settings.Default.LOOPS; i++)
{
string value = DOORLOOPTEST.Properties.Settings.Default.UP_or_DOWN;
switch (value)
{
case "UP":
_time = TimeSpan.FromSeconds(HeadUpTime);
_MotorMove = new Task(() => MotorMove(sender, e, _time));
await _MotorMove;
break;
case "DOWN":
_time = TimeSpan.FromSeconds(HeadDownTime);
_MotorMove = new Task(() => MotorMove(sender, e, _time));
await _MotorMove;
break;
}
}
}
private void MotorMove(object sender, EventArgs e, TimeSpan _time)
{
TimerBegins(sender, e);
LOOP_timer = new DispatcherTimer(new TimeSpan(0, 0, 1), DispatcherPriority.Normal, delegate
{
if (_time == TimeSpan.Zero)
{
LOOP_timer.Stop();
LOOP_timer.Tick += TimerIsGedaan;
}
_time = _time.Add(TimeSpan.FromSeconds(-1));
}, Application.Current.Dispatcher);
LOOP_timer.Start();
}
あなた
Loop
コードからTask.Run
、 '_time'タイムスパンの遅延を遅延させますか?その場合は、単に 'MotorMove'を非同期にし、' DispatcherTimer'を 'Task.Delay(_time)'を待つものに置き換えることができますか?または私は何かを逃している?また、 'TimerIsGedaan'はタイマーが止まったら購読しているようです - これは期待していますか? – StuartLC