是否有System.Threading.SynchronizationContext.Current.PostAsync()?

时间:2011-09-01 22:15:29

标签: c# multithreading asynchronous

我可以将任何内容返回给UI线程,如下所示:

// when I am on the UI thread
var _UI = System.Threading.SynchronizationContext.Current;
// then on a background thread
_UI.Post((x) => { DoSomething(); }, null);

但是,如果我在后台线程中使其成为 asynchrnous ,那么调用_UI.Post()将撤消我的努力并且使UI等待执行DoSomething()。

当然_UI.PostAsync()是伪代码。但有没有办法在UI线程上执行但是以异步方式执行?从根本上说,我意识到我暴露了我缺乏知识和理解。请怜悯。我只是问;)

1 个答案:

答案 0 :(得分:3)

SynchronizationContext.Post()不会阻止后台线程,因为它会异步“发布”回UI线程(在本例中)。

UI线程只会在DoSomething()调用的持续时间内阻塞 - 但在这种情况下,您说必须在UI线程上运行,在这种情况下,它将占用UI线程。

这里的关键是将大部分工作放在后台线程上,只调用.Post(...)来进行直接设置用户界面的操作。因此,它们应该是非常快速的操作,并且从不(显着)阻止UI。