是否有一个同步等待函数不会占用.NET WPF中的UI线程?类似的东西:
Sub OnClick(sender As Object, e As MouseEventArgs) Handles button1.Click
Wait(2000)
'Ui still processes other events here
MessageBox.Show("Is has been 2 seconds since you clicked the button!")
End Sub
答案 0 :(得分:15)
你可以使用DispatcherTimer
来做这类事情。
编辑:这也可以......
private void Wait(double seconds)
{
var frame = new DispatcherFrame();
new Thread((ThreadStart)(() =>
{
Thread.Sleep(TimeSpan.FromSeconds(seconds));
frame.Continue = false;
})).Start();
Dispatcher.PushFrame(frame);
}
(Dispatcher.PushFrame
documentation.)
从.NET 4.5开始,您可以使用async
事件处理程序和Task.Delay
来获得相同的行为。在这样的处理程序中简单地让UI更新返回Dispatcher.Yield
。
答案 1 :(得分:0)
这是Task.Delay
的解决方案。我在使用ViewModel
的{{1}}的单元测试中使用它。
DispatcherTimer