如果在另一个 MessageDialog
对象已显示给用户但未被关闭(即,当另一个已经启动时显示一个弹出窗口),一个 UnauthorizedAccessException
被抛出。当您有多个线程试图同时提醒用户时,这会使事情变得困难。
我当前的(权宜之计)解决方案只是用 try/catch block 围绕 ShowAsync
调用并吞下异常。这不希望地导致用户错过后续通知。我能想到的唯一解决这个问题的方法是手动实现某种弹出队列。这似乎是一项过多的工作,但是,考虑到其他框架(如 Windows Phone)没有这个问题,并且只会在用户关闭时一个接一个地显示弹出窗口。
还有其他方法可以解决这个问题吗?
最佳答案
您可以使用此扩展方法轻松做到这一点:
public static class MessageDialogShower
{
private static SemaphoreSlim _semaphore;
static MessageDialogShower()
{
_semaphore = new SemaphoreSlim(1);
}
public static async Task<IUICommand> ShowDialogSafely(this MessageDialog dialog)
{
await _semaphore.WaitAsync();
var result = await dialog.ShowAsync();
_semaphore.Release();
return result;
}
}
关于c# - 如何在 WinRT 中同时允许多个弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14488587/