我可以将任何内容返回给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线程上执行但是以异步方式执行?从根本上说,我意识到我暴露了我缺乏知识和理解。请怜悯。我只是问;)
答案 0 :(得分:3)
SynchronizationContext.Post()不会阻止后台线程,因为它会异步“发布”回UI线程(在本例中)。
UI线程只会在DoSomething()
调用的持续时间内阻塞 - 但在这种情况下,您说必须在UI线程上运行,在这种情况下,它将占用UI线程。
这里的关键是将大部分工作放在后台线程上,只调用.Post(...)
来进行直接设置用户界面的操作。因此,它们应该是非常快速的操作,并且从不(显着)阻止UI。