Avalonia:致命错误后如何向用户显示信息?

问题描述 投票:0回答:1

请注意,我对 WPF 和 Avalonia 并没有完全了解,所以请放过我一些 :(

一旦 Avalonia 应用程序中抛出未处理的异常,我想在退出程序之前向用户显示一些信息。这样我可以向用户显示一些链接来报告问题或执行类似的操作。

这里的根本问题是 Avalonia 中的消息框(特别是来自

MessageBox.Avalonia
的消息框)需要一个窗口来显示,程序需要以某种方式等待消息框关闭,并且程序需要重新抛出异常才能退出。

请注意,我不需要使用消息框,我只需打开一个文件即可在发生致命错误时显示,但我怀疑这是最好的解决方案...我仍然非常喜欢消息框.

我尝试寻找与WPF相关的解决方案,但它们都使用“不需要窗口”的

MessageBox.Show()
来显示并等待用户进行输入(就我和这个问题而言)。这在阿瓦隆尼亚不存在。


这些是我发现但存在问题的潜在解决方案:

全球Try-Catch

    [STAThread]
    public static void Main(string[] args) {
        try
        {
            BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
        }
        catch (Exception ex)
        {
            ExceptionDispatchInfo.Capture(ex).Throw();
        }
    }

我放弃了这个解决方案,因为这需要在某个地方设置一个窗口。不过它有潜力。

AppDomain.CurrentDomain.UnhandledException

public partial class App : Application
{
    public override void Initialize()
    {
        AppDomain.CurrentDomain.UnhandledException += (s, e) =>
        {
            // ???
        }
    }

    // ...
}

这也会失败,因为它需要在某个地方占用一个窗口。即使我使用不需要窗口的

MessageBoxManager.GetMessageBoxStandard(...).Show()
,它也不会阻止继续引发异常并退出程序的代码。这意味着用户甚至看不到该窗口,因为程序在窗口显示后立即退出。

c# wpf exception avalonia
1个回答
0
投票

您是否尝试过使用该方法的异步版本

Show()
?使用
MessageBoxManager.GetMessageBoxStandard(...).Show()
的解决方案可能有机会。如果它不起作用,请尝试将 MessageBox 调用代码包装在如下任务中:

await Task.Run(() => MessageBoxManager.GetMessageBoxStandard(...).Show());
© www.soinside.com 2019 - 2024. All rights reserved.