WPF-Catel-在不同的线程中禁用CommandManager for Window

时间:2018-07-02 14:49:10

标签: wpf multithreading catel

因为PleaseWaitService是由Catel 5.0.0删除的,所以我将实现的源代码从4.5.0版本复制到了单独的lib中,并链接了“ new” lib,并像以前一样使用了Service。 br /> 但是由于PleaseWaitService与我们现有的代码库结合出现了一些错误,因此我重写并简化了Service(仅支持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到窗口的标准注入?

致谢

1 个答案:

答案 0 :(得分:1)

卡特尔(Catel)的优点是所有东西都是可插入的。如果您希望命令管理器具有不同的行为,则可以创建自己的版本并以其他方式覆盖所需的内容。不要忘记在ServiceLocator中注册它。