同步等待而不阻止UI线程

Pet*_*erM 8 .net vb.net wpf multithreading wait

是否有一个同步等待函数不会占用.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
Run Code Online (Sandbox Code Playgroud)

H.B*_*.B. 17

你可以使用a 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);
}
Run Code Online (Sandbox Code Playgroud)

(Dispatcher.PushFrame文件.)


从.NET 4.5开始,您可以使用async事件处理程序并Task.Delay获得相同的行为.在这样的处理程序中简单地让UI更新返回Dispatcher.Yield.