MessageBox.Show 在 Windows 10 台平板电脑上关闭后导致阻塞
MessageBox.Show causing blocking after close on Windows 10 tablet
我们有一个 WPF 应用程序也可以在平板电脑上运行。我们的目标是 Windows 10,.Net 4.6.2。
我们有一个调用 MessageBox.Show 的异步事件处理程序。用户点击是,应用程序继续做一些事情。
当应用程序在平板电脑硬件上运行时,应用程序会在事件完成后锁定 10-20 秒。我无法从桌面或模拟器中复制它,只有当它实际在平板电脑上运行时。
我已经把它隔离到MessageBox了。当我将其取出时,应用程序运行正常。我觉得可能和线程有关。
有什么想法吗?
使用"async" 将导致在单独的线程上调用MesssageBox.Show() 方法。不要将 MesssageBox.Show() 调用放在异步调用中,而是考虑将其放在线程中,确保将其声明为后台线程:
Thread messageBoxThread = new Thread(() => { yourMessageBoxCall(); );
messageBoxThread.IsBackground = true;
messageBoxThread.Start();
根据@stuicidle 的线索,我走上了更好的研究道路。很多人都尝试过解决async 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();
}
我们有一个 WPF 应用程序也可以在平板电脑上运行。我们的目标是 Windows 10,.Net 4.6.2。
我们有一个调用 MessageBox.Show 的异步事件处理程序。用户点击是,应用程序继续做一些事情。
当应用程序在平板电脑硬件上运行时,应用程序会在事件完成后锁定 10-20 秒。我无法从桌面或模拟器中复制它,只有当它实际在平板电脑上运行时。
我已经把它隔离到MessageBox了。当我将其取出时,应用程序运行正常。我觉得可能和线程有关。
有什么想法吗?
使用"async" 将导致在单独的线程上调用MesssageBox.Show() 方法。不要将 MesssageBox.Show() 调用放在异步调用中,而是考虑将其放在线程中,确保将其声明为后台线程:
Thread messageBoxThread = new Thread(() => { yourMessageBoxCall(); );
messageBoxThread.IsBackground = true;
messageBoxThread.Start();
根据@stuicidle 的线索,我走上了更好的研究道路。很多人都尝试过解决async 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();
}