在wpf里面睡觉循环

时间:2011-11-10 11:10:30

标签: wpf multithreading sleep

我一直在使用WPF和线程。

我想在for循环期间暂停整个屏幕(仅限应用程序)。

E.g。

foreach (classA a in classesA)
{
....
....
Thread.sleep(100);

}

然而,我发现它会长时间睡眠然后在一段时间内执行所有语句。 这不是我想要的。我想在for循环的执行中睡觉。那是在第一次循环后100ms睡觉,然后在第二次循环后再次睡觉.....

我发现有些文章提到了DoEvents(),但我对它并不熟悉,WPF似乎没有这种东西。

其他一些文章提到了DispatcherTimer。不过,它不会锁定屏幕。 我想锁定整个屏幕(仅限应用程序),以防止在执行for循环期间单击任何按钮。

我怎么能这样做?

非常感谢你!

2 个答案:

答案 0 :(得分:4)

如果要阻止与根元素上的UI元素集IsEnabled=false的交互,则不能阻止UI线程,否则它无法处理其队列(包含呈现UI),然后执行非元素阻塞等待this question

答案 1 :(得分:0)

如果您愿意尝试使用建议的asyncawait关键字,您可以使用这样的同步语义来实现睡眠行为。您需要安装Async CTP来执行此操作。 1

public aysnc void YourButton_Click(object sender, EventArgs args)
{
  foreach (classA a in classes)
  {
    await Task.Delay(100);
  }
}

1 异步CTP使用TaskEx代替Task