首页 > 解决方案 > WPF - Catel - 为不同线程中的窗口禁用 CommandManager

问题描述

因为它PleaseWaitService在 Catel 5.0.0 中被删除,所以我将 4.5.0 版本的实现源代码复制到一个单独的库中,并链接“新”库并像以前一样使用服务。
但是因为与我们现有的代码库结合存在一些错误,PleaseWaitService我重写并简化了服务(仅支持 WPF)。

现在我PleaseWaitWindow在一个不同的线程中展示它,它在我的测试项目中有效,但在生产中无效。InvalidOperationException当我打电话时我得到了一个window.Show()(窗口是在同一个线程中创建的)。

在异常的堆栈跟踪中是来自 Catel CommandManager 的一些调用

at System.Windows.Threading.Dispatcher.VerifyAccess() at Catel.MVVM.CommandManager.SubscribeToKeyboardEvents(FrameworkElement view) in C:\CI_WS\Ws\107901\Source\Catel\src\Catel.MVVM\Catel.MVVM.Shared\MVVM\Commands\CommandManager.wpf.cs:line 64 at Catel.MVVM.CommandManager.OnWindowLoaded(Object sender, RoutedEventArgs e) in C:\CI_WS\Ws\107901\Source\Catel\src\Catel.MVVM\Catel.MVVM.Shared\MVVM\Commands\CommandManager.wpf.cs:line 78 [...] at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)

我在 CommandManager 中注册了一个不会在我的自定义 PleaseWaitWindow 中使用的命令。

所以我的问题是:如何禁用从 Commandmanager 到窗口的标准注入?

问候

标签: wpfmultithreadingcatel

解决方案


Catel 的优势在于一切都是可插拔的。如果您想要命令管理器的不同行为,您可以创建自己的版本并以不同方式覆盖您想要的东西。不要忘记在ServiceLocator.


推荐阅读