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

标签 c# wpf for-loop mvvm timer

我希望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/

相关文章:

c# - 有没有办法在给定大小、样式等的情况下找到固定宽度字体中字符的宽度?

c# - 无法从拆分 int 数组中获得正确的输出

c# - 将非原始值分配给用户控件属性?

wpf - DataGridTemplateColumn 组合框绑定(bind)

wpf - 程序员编辑 XAML 的最佳方式

java - Java 中是否可以仅在一个输出中显示 for 循环的结果?

javascript - jquery for 循环有两种不同索引的方法

Python:如何重新启动循环遍历 csv 的 FOR 循环

c# - 如何正确地将 iso-8859-1 转换为 utf8?

c# - 摆脱 try block 中的条件语句