我们还有一款也能在平板电脑上运行的WPF应用。我们的目标是Windows 10,.Net 4.6.2。
我们有一个调用MessageBox.Show的异步事件处理程序。用户单击是,应用程序继续执行某些操作。
当应用在平板电脑硬件上运行时,应用会在事件完成后锁定10-20秒。我不能在桌面或模拟器中复制它,只有当它实际在平板电脑上运行时才能复制。
我已将其隔离到MessageBox。当我拿出它时,应用程序表现正常。我觉得它可能与线程有关。
有什么想法吗?
答案 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();
}