在WinForms项目中,我有一个运行的算法,它不断计算数据并更新UI。它看起来像这样:显示消息框但继续异步执行
async Task BackgroundWorkAsync() {
while (true) {
var result = await Compute();
UpdateUI(result);
}
}
有时候,这取决于result
包含我想显示MessageBox
但立即继续运行算法。下面不起作用,因为它会阻止进一步的处理,直到MessageBox
被驳回:
while (true) {
var result = await Compute();
UpdateUI(result);
if (...) MessageBox.Show(...); //new code
}
我怎样才能让MessageBox.Show
通话无阻塞?
(是的,这意味着多个消息框可能在同一时间弹出。这是确定的。)
这可能会让用户感到烦恼,但您可以创建一个Form并将其显示给用户。 –
'BackgroundWorkAsync' /'Compute'能否在后台线程上运行? –
'BackgroundWorkAsync'在Load事件中启动,并在UI线程上运行。我认为''Compute'在内部做什么并不重要。它可能存在UI依赖关系。 – boot4life