MessageBox.在UI线程中显示


this.Dispatcher.InvokeAsync(
() => {
MessageBoxResult result = MessageBox.Show("111111111111111111111111", "Child process failed", MessageBoxButton.OK);
}
);
this.Dispatcher.InvokeAsync(
() => {
MessageBoxResult result = MessageBox.Show("22222222222222222222222", "Child process failed", MessageBoxButton.OK);
}
);

为什么先显示2222222222,然后显示11111111111

如果我把this.Dispatcher.InvokeAsync改成this.Dispatcher.Invoke,订单就对了。有人知道为什么吗?。

Dispatcher.InvokeAsync本质上是将一条消息放入消息队列,请求在UI线程空闲时运行该方法。

虽然消息框显示了一些消息,但仍将处理这些消息,而此消息可能就是其中之一。因此,第一个消息框将首先显示,过一会儿,第二个消息框会显示在第一个消息的顶部。当您单击第二个消息框时,它看起来就像第一个消息框。

this.Dispatcher.Invoke也将消息放入消息队列,但在这种情况下,调用者也在等待UI线程处理消息,然后再继续,因此消息框会一个接一个地显示,而不是在顶部。

最新更新