c# - 如何在 WinRT 中同时允许多个弹出窗口?

标签 c# windows-8 popup windows-runtime winrt-async

如果在另一个 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/

相关文章:

javascript - addEventListener 仅在创建应用程序时起作用

CSS 显示 html 内容,如 Windows 8 应用程序网格

c# - 在 Windows 运行时从位图创建流

javascript - 如何打开多个弹窗?

c# - 使用 SetValue 时未创建注册表项

c# - 从流中加载多个串联的 JSON 对象

javascript - 是否有用于上下文感知弹出窗口的 JavaScript 框架?

html - Firefox 自动弹出另存为窗口

c# - 如何在 ASP.NET Core 中设置默认区域?

c# - "Identity.External"的 ASP.NET Core 身份异常