wpf - 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 到窗口的标准注入?
问候
解决方案
Catel 的优势在于一切都是可插拔的。如果您想要命令管理器的不同行为,您可以创建自己的版本并以不同方式覆盖您想要的东西。不要忘记在ServiceLocator
.
推荐阅读
- javascript - React JS - 我无法在“选择”的选定选项中提供 console.log
- c# - 即使捕获到异常,是否有任何方法可以找到 .net 应用程序崩溃的原因
- angular - 无法找到解决方案,尝试注册减速器编译错误...类型“Action”不可分配给类型“Actions”
- google-sheets-formula - 带有 UTC 时间戳的 Google 表格 Countif 函数
- php - 在 laravel 上比较来自 db 的日期使用 sql
- mysql - Django中的SQL instr等价物
- mule - Mule 4.3 社区版的可重复文件存储流
- c# - Navisworks,如何获得有关 ModelItemCollection 的位置
- c# - 同时在 2 个不同的环境(DEV 和 STaging)上运行测试,而这两个环境都有 2 个不同的 url
- java - 将双精度值转换为压缩十进制 COBOL 格式 PIC S9(5)V9(4) COMP-3/压缩十进制 COBOL 格式 PIC S9(3)V9(4) JAVA 中的 COMP-3 格式