加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如果在WPF 4.0中使用启动画面,带有异常详细信息的MessageB

发布时间:2020-12-15 04:32:13 所属栏目:百科 来源:网络整理
导读:我的基于桌面的 WPF应用程序(4.0)与DB一起使用,为此应该在应用程序的启动时与SQL Server建立连接.当然,这个操作需要一些时间,用户必须等待几秒钟(3-5),而.Net Framework启动并连接到SQL Server. 在这种情况下,我决定使用闪屏.我在解决方案中添加了一些图片,
我的基于桌面的 WPF应用程序(4.0)与DB一起使用,为此应该在应用程序的启动时与SQL Server建立连接.当然,这个操作需要一些时间,用户必须等待几秒钟(3-5),而.Net Framework启动并连接到SQL Server.

在这种情况下,我决定使用闪屏.我在解决方案中添加了一些图片,将构建操作设置为“启动画面”,编译了我的应用程序,它的工作原理!如果尝试连接到SQL Server失败(例如服务器不可用),我的应用程序将抛出异??常,并向用户MessageBox显示警告和异常详细信息,用户按OK和应用程序关闭(Application.Current.Shutdown()).

在我添加启动画面之前,所有这些逻辑都可以完美地工作,但是现在,添加了启动画面,如果我在SQL Server不可用时运行应用程序,应用程序会抛出异常(正如我在我的代码中提到的那样),但是出现了带有通知的MessageBox持续1-2秒并且在没有任何用户交互的情况下消失,用户甚至无法读取其上写的内容.

我发现,如果我尝试显示2个MessagBoxes,那么第一个将立即出现并消失,但第二个将保持到用户将按OK.

我的问题是:
如何解决这个问题?
如果抛出异常,我想使用启动画面并显示一个MessageBox,并让用户决定何时关闭它(用户单击“确定”按钮).

这是一个描述我的应用程序逻辑的流程图:

没有例外(好的场景):
运行app→启动画面→if(isConnectedToSQL = true)→显示主窗口…

有异常(错误的情况):
运行应用程序→启动画面→if(isConnectedToSQL = false)→抛出异常→显示带有异常详细信息的消息框→用户单击确定→关闭应用程序.

谢谢.

解决方法

原因在于SplashScreen如何使用BeginInvoke来关闭它自己.我无法准确确定MessageBox关闭的位置*,但我确实看到了一个简单的修复:

不要使用MessageBox.

创建一个错误窗口,我们称之为“ErrorWindow.xaml”.使用该窗口向用户显示错误消息并响应“确定”按钮.

按照this guideline声明自己的Main过程并改变它如下:

编辑以显示如何将信息传递给ErrorWindow.

public static void Main()
{
    SplashScreen splashScreen = new SplashScreen("whatever.jpg");
    splashScreen.Show(true);
    string errorMessage;
    bool dataLoaded = LoadDataFromDatabase(out errorMessage);
    WpfApplication1.App app = new WpfApplication1.App();
    Window windowToRun = dataLoaded ? (Window)new MainWindow() : (Window)new ErrorWindow { ErrorMessage = errorMessage };
    app.Run(windowToRun);
}

>我的猜测是SplashScreen.Show和Application.Run是两个独立的消息泵.第一个是通过调用PostQuitMessage终止的.这就解释了MessageBox关闭的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读