WPF Caliburn.Micro 使用了错误的平台提供程序
WPF Caliburn.Micro uses wrong platform provider
在我的 ShellViewModel PlatformProvider.Current 中按预期生成 XamlPlatformProvider。在另一个 ViewModel 中,导航到 Frame PlatformProvider.Current 会产生 DefaultPlatformProvider。
此外,如果我在 ShellViewModel 中触发一个函数,我可以看到 PlatformProvider.Current 仍然会生成 XamlPlatformProvider,因此 ViewModel 不受影响。
这会导致 Caliburn.Micro.Execute.OnUIThread 和其他特定于平台的调用(例如使用 BindableCollection)出错。
它是在将一个大型项目从 3.2.0 版更新到 Caliburn.Micro 4.0.173 版后开始发生的。
我无法在较小的测试项目中重现错误,因此无法显示有意义的代码。
我尝试用最小的引导程序替换整个引导程序,但仍然看到错误。
编辑:
从 Caliburn.Micro.Execute.BeginOnUIThread 中的代码创建 UI 组件会出现错误:
“调用线程必须是 STA,因为许多 UI 组件需要这个”。
更改 BindableCollection 会出现错误:
“这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。”
如果我将它们包装在 Application.Current.Dispatcher.Invoke 中,则上述方案有效,这表明 Caliburn.Micro 无法使用 Dispatcher/UI 线程。
我在 .NET Framework 4.8 上使用 C#。
引发错误的第二个 ViewModel 位于包含 NuGet 包 Caliburn.Micro.Core 而不是 Caliburn.Micro 的第二个项目中。将两者更新到同一版本解决了这个问题。
我在整个解决方案中使用了 NuGets Consolidate 函数来更新 Caliburn.Micro 并且错过了 Caliburn.Micro.Core.
在我的 ShellViewModel PlatformProvider.Current 中按预期生成 XamlPlatformProvider。在另一个 ViewModel 中,导航到 Frame PlatformProvider.Current 会产生 DefaultPlatformProvider。 此外,如果我在 ShellViewModel 中触发一个函数,我可以看到 PlatformProvider.Current 仍然会生成 XamlPlatformProvider,因此 ViewModel 不受影响。
这会导致 Caliburn.Micro.Execute.OnUIThread 和其他特定于平台的调用(例如使用 BindableCollection)出错。 它是在将一个大型项目从 3.2.0 版更新到 Caliburn.Micro 4.0.173 版后开始发生的。
我无法在较小的测试项目中重现错误,因此无法显示有意义的代码。 我尝试用最小的引导程序替换整个引导程序,但仍然看到错误。
编辑: 从 Caliburn.Micro.Execute.BeginOnUIThread 中的代码创建 UI 组件会出现错误: “调用线程必须是 STA,因为许多 UI 组件需要这个”。 更改 BindableCollection 会出现错误: “这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。”
如果我将它们包装在 Application.Current.Dispatcher.Invoke 中,则上述方案有效,这表明 Caliburn.Micro 无法使用 Dispatcher/UI 线程。
我在 .NET Framework 4.8 上使用 C#。
引发错误的第二个 ViewModel 位于包含 NuGet 包 Caliburn.Micro.Core 而不是 Caliburn.Micro 的第二个项目中。将两者更新到同一版本解决了这个问题。 我在整个解决方案中使用了 NuGets Consolidate 函数来更新 Caliburn.Micro 并且错过了 Caliburn.Micro.Core.