【问题标题】:System.Runtime.InteropServices.COMException on MessageDialog WINUI3MessageDialog WINUI3 上的 System.Runtime.InteropServices.COMException
【发布时间】:2021-09-07 17:54:00
【问题描述】:

当我尝试调用 MessageDialog 时,我的应用程序崩溃并显示以下错误消息:

 System.Runtime.InteropServices.COMException: 'Invalid Window Identifier. (0x80070578)'

这发生在 App.xaml.xs 和我为此提议的助手中。

app.xaml 上的代码:

var messageDialog = new MessageDialog("Excedeu o limite de tentativas para fazer login.");
var result = await messageDialog.ShowAsync();

助手代码:

public static async Task ShowAsync(String keyName)
        {
            var msg = LocalizationHelper.GetValue(keyName);
            if (string.IsNullOrWhiteSpace(msg)) msg = keyName;

            var messageDialog = new MessageDialog(msg);
            await messageDialog.ShowAsync();
        }
                  

【问题讨论】:

    标签: c# xaml dialog winui


    【解决方案1】:

    您应该使用ContentDialog 类来构建您的对话体验。

    MessageDialog API 已弃用,如 docs 中所述:

    使用 ContentDialog 类来构建您的对话体验。不要使用已弃用的 MessageDialog API。

    【讨论】:

      【解决方案2】:

      在 .NET 5 或更高版本的桌面应用程序中,您需要在弹出对话框之前对 MessageDialog 对象使用 InitializeWithWindow.Initialize 方法。

      这是因为桌面应用程序可以有多个窗口对象,因此您需要为对话框指定所有者窗口。

      例如:

      var messageDialog = new MessageDialog("example");
      var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(myWindow);
      WinRT.Interop.InitializeWithWindow.Initialize(messageDialog, hwnd);
      var result = await messageDialog.ShowAsync();
      

      了解更多details

      【讨论】:

        猜你喜欢
        • 2011-09-09
        • 2022-11-21
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多