首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不阻塞UI-Thread的同步等待

不阻塞UI-Thread的同步等待
EN

Stack Overflow用户
提问于 2011-05-25 05:45:03
回答 2查看 8.2K关注 0票数 9

在.NET WPF中有没有同步等待函数,它不会占用UI线程?类似于:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-25 05:46:29

你可以使用DispatcherTimer来做这类事情。

编辑:这也可以...

代码语言:javascript
复制
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

票数 18
EN

Stack Overflow用户

发布于 2018-07-14 01:56:29

这是一个使用Task.Delay的解决方案。我在使用DispatcherTimerViewModel的单元测试中使用它。

代码语言:javascript
复制
var frame = new DispatcherFrame();

var t = Task.Run(
    async () => {
        await Task.Delay(TimeSpan.FromSeconds(1.5));
        frame.Continue = false;
    });

Dispatcher.PushFrame(frame);

t.Wait();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6117293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档