gpt4 book ai didi

c# - 如何暂停for循环,直到DispatcherTimer结束?

转载 作者:行者123 更新时间:2023-12-03 10:42:41 24 4
gpt4 key购买 nike

我希望for循环等待计时器完成,然后再继续for循环。我该怎么做?我尝试了await&async,但我做错了。
现在执行的操作:循环开始,运行计时器,但不等待其结束。因此,它循环运行,并再次启动计时器。

我的项目的更多内容:它是电动床的电机测试仪。这段代码需要在电动机上下移动的时间内运行。
因此,我正在使用MVVM,WPF,ADRUINO UNO。

如果有人有好的建议,我很想听听。
(对不起,我的英语不好)。

PIECE OF CODE:


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();
}

最佳答案

只是为了澄清意见:

除非代码中的内容比MVCE的内容多,否则DispatcherTimer的唯一目的似乎是引入TimeSpan _time延迟,以1秒的时间间隔滴答,然后在最后的滴答声中停止计时器,订阅TimerIsGedaan,然后启动计时器又来了?

假设您要做的就是一旦TimerIsGedaan过去就调用TimeSpan _time,如何将MotorMove转换为异步,以及如何使用Task.Delay

private async Task MotorMove(object sender, EventArgs e, TimeSpan _time)
{
TimerBegins(sender, e);
await Task.Delay(_time);
TimerIsGedaan();
}

除非每次都需要一个新线程,否则您也可以考虑从 Task.Run代码中删除 Loop,即
 await MotorMove(sender, e, _time);

关于c# - 如何暂停for循环,直到DispatcherTimer结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48021340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com