我一直在使用WPF和线程。
我想在for循环期间暂停整个屏幕(仅限应用程序)。
E.g。
foreach (classA a in classesA)
{
....
....
Thread.sleep(100);
}
然而,我发现它会长时间睡眠然后在一段时间内执行所有语句。 这不是我想要的。我想在for循环的执行中睡觉。那是在第一次循环后100ms睡觉,然后在第二次循环后再次睡觉.....
我发现有些文章提到了DoEvents(),但我对它并不熟悉,WPF似乎没有这种东西。
其他一些文章提到了DispatcherTimer。不过,它不会锁定屏幕。 我想锁定整个屏幕(仅限应用程序),以防止在执行for循环期间单击任何按钮。
我怎么能这样做?
非常感谢你!
答案 0 :(得分:4)
如果要阻止与根元素上的UI元素集IsEnabled=false
的交互,则不能阻止UI线程,否则它无法处理其队列(包含呈现UI),然后执行非元素阻塞等待this question。
答案 1 :(得分:0)
如果您愿意尝试使用建议的async
和await
关键字,您可以使用这样的同步语义来实现睡眠行为。您需要安装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
。