作为我的应用程序启动过程的一部分,它检查数据完整性,如果它发现问题,它会向用户弹出一条消息,告诉他们可能需要一段时间修理东西。MessageBox.Show在应用程序启动早期导致应用程序终止
我使用MessageBox.Show显示消息。由于数据检查是从工作者线程完成的,因此我将切换到UI线程以进行该调用,然后设置ManualResetEvent以在用户确认消息时告知工作线程。
我在应用程序生命周期的早期从主应用程序类的构造函数中启动数据检查/加载,通过拆分工作线程(使用ThreadPool)。
当我用调试器运行,并显示消息时,应用程序只是等待输入。当我在没有调试器的情况下运行时,应用程序在显示对话框10秒后终止。
这10秒钟是一个很大的线索 - 它告诉我操作系统认为应用程序花了很长时间来初始化(操作系统杀死需要很长时间启动的应用程序)。
我认为我的MessageBox.Show在App.RootFrameNavigating有机会被调用之前阻塞了UI线程。
我的问题:
- 难道我的声音诊断正确?
- 我宁愿提前启动我的数据加载,因为它几乎完全是IO,除了这个消息框,并且越早我可以让我的模型加载,越好,但通常会延迟数据加载,直到后来在应用生命周期?
- 其他意见/建议?我无法保证哪个页面将成为开始页面,因为应用程序可能会恢复到任何页面。我也在考虑让MessageBox.Show延迟本身,直到应用程序初始化,也许轮询一个由App.RootFrameNavigating设置的标志 - 这是否有意义?
看起来这应该很好。如果从头开始一个应用,我可能会这样做。我会使用来自后台工作者的Mvvm-light消息到UI层而不是信号量。这将避免应用程序类的更改。 –