我在开发一个基于Prism的WPF应用程序时遇到了问题。 在加载任何窗口之前,应用程序使用Prism启动器引导,并在不同的线程(STA)上打开模式对话框,然后加载一堆东西(服务等)。该对话框在此期间处于打开状态,并允许通过事件聚合器传递更新来通知用户应用程序启动过程的进度。当加载完成后,引导程序关闭对话框并打开主应用程序窗口。然而,关闭应用程序时同样会出现相同的情况。主窗口被关闭后,将打开一个对话框框(同样在新的STA线程上),以允许通知。但是,当调用ShowDialog时(它发生在新的STA线程中),就会引发异常:“无法使用属于其父对象Freezable的不同线程的DependencyObject”。经过长时间的调试,我发现异常的原因是窗口的背景颜色是从应用程序级别的合并字典中(在WPF UI线程上实例化)获取的画笔/图像。如果在没有ResouceDictionary的情况下加载图像,则一切正常。
总之: 当使用resourceDictionary且在第二次调用一个新的STA线程时观察到这个异常,在调用ShowDialog时抛出异常。 如果只有一个对话框(例如在启动过程中没有对话框,仅在关闭过程中存在对话框),则不会发生异常。
我的问题是:原因是什么? 在这种情况下,这个异常具体意味着什么? (我明白一般来说其他线程的UI线程更新有一些问题,但我不明白为什么这只在第二次dialgo+thread实例上发生)。
谢谢 :)
总之: 当使用resourceDictionary且在第二次调用一个新的STA线程时观察到这个异常,在调用ShowDialog时抛出异常。 如果只有一个对话框(例如在启动过程中没有对话框,仅在关闭过程中存在对话框),则不会发生异常。
我的问题是:原因是什么? 在这种情况下,这个异常具体意味着什么? (我明白一般来说其他线程的UI线程更新有一些问题,但我不明白为什么这只在第二次dialgo+thread实例上发生)。
谢谢 :)