MessageBox.Show在Windows 10平板电脑上关闭后导致阻塞

时间:2017-04-28 21:16:09

标签: wpf async-await windows-10 tablet messagebox

我们还有一款也能在平板电脑上运行的WPF应用。我们的目标是Windows 10,.Net 4.6.2。

我们有一个调用MessageBox.Show的异步事件处理程序。用户单击是,应用程序继续执行某些操作。

当应用在平板电脑硬件上运行时,应用会在事件完成后锁定10-20秒。我不能在桌面或模拟器中复制它,只有当它实际在平板电脑上运行时才能复制。

我已将其隔离到MessageBox。当我拿出它时,应用程序表现正常。我觉得它可能与线程有关。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

使用" async"将导致在单独的线程上调用MesssageBox.Show()方法。而不是将MesssageBox.Show()调用放在异步调用中,考虑将其放在一个Thread中,确保将其声明为后台线程:

Thread messageBoxThread = new Thread(() => { yourMessageBoxCall(); );
messageBoxThread.IsBackground = true;
messageBoxThread.Start();

答案 1 :(得分:1)

根据@ stuicidle的线索,我走了一条更好的研究路径。很多人都试图解决异步MessageBox问题。

我最终从how can i use Messagebox.Show in async method on Windows Phone 8?

获得了我的解决方案

我的代码如下所示:

private async Task HandleEvent()
{
    var message = $"Continue?";
    MessageBoxResult result = MessageBoxResult.None;
    var dg = new Action(() => result = MessageBox.Show(message, "Warning", MessageBoxButton.YesNo));
    await Dispatcher.BeginInvoke(dg);

    if (result == MessageBoxResult.Yes)
        await DoSomeStuff();
}