C# .NET内核和跨线程调度

C# .NET内核和跨线程调度,c#,multithreading,.net-core,mvvm-light,C#,Multithreading,.net Core,Mvvm Light,我正在将一个大型.NET Framework应用程序移植到.NET Core。该应用程序将WPF用于UI层,并利用MVVM Light(MvvmLightLibsStd10)实现MVVM体系结构 我目前面临的问题之一是跨线程UI更新。在框架版本中,我使用GalaSoft.MvvmLight.Platform库访问DispatcherHelper,该库包含一个易于使用的DispatcherHelper.CheckBeginInvokeOnUI()函数来发送属性更改通知 现在,这个GalaSoft.

我正在将一个大型.NET Framework应用程序移植到.NET Core。该应用程序将WPF用于UI层,并利用MVVM Light(MvvmLightLibsStd10)实现MVVM体系结构

我目前面临的问题之一是跨线程UI更新。在框架版本中,我使用
GalaSoft.MvvmLight.Platform
库访问
DispatcherHelper
,该库包含一个易于使用的
DispatcherHelper.CheckBeginInvokeOnUI()
函数来发送属性更改通知

现在,这个
GalaSoft.MvvmLight.Platform
库在NuGet包的
net45
文件夹中可用,但不在
netstandard1.0
文件夹中,这给了我一个提示,这个库可能是特定于平台(Windows?)的,因此不适合.net核心项目

是否建议使用此库?如果不是,以线程安全的方式引发属性更改通知的正确方法是什么

更新:刚刚发现这是github上请求的功能之一:


你的问题充其量也太宽泛了,最坏的情况是基于意见。也就是说,对于基本的非集合属性,您根本不需要任何额外的代码,因为WPF隐式地处理
INotifyPropertyChanged
的跨线程通知。WPF还具有内置的集合更改通知处理功能,但这需要在代码中进行一些初始设置,才能选择使用该功能。@PeterDuniho:我过去的结果好坏参半。有时UI会得到干净的更新,而不需要任何线程处理;有时它会引发跨线程封送异常,尤其是在计时器计时事件中更改道具时。我认为始终通过
DispatchHelper
来执行此操作是安全的。WPF还具有内置的集合更改通知处理功能,但这需要在代码中进行一些初始设置才能选择使用此功能。这方面有任何链接/提示吗?“我认为总是通过DispatchHelper这样做是安全的”——是的,没错。假设操作正确,那么明确地确保您处于正确的线程上是不会有任何伤害的,即使框架无论如何都会为您这样做。“有此方向的链接/提示吗?”--您是否在堆栈溢出中搜索了与WPF中的
INotifyCollectionChanged
相关的主题?不管怎样,你可以从这里开始:@PeterDuniho:谢谢。乔恩在那页上的回答似乎很有帮助。另外,我后来发现MVVMLight为每个平台(包括android、xamarin和.netfx)提供了一个版本的
Platform
库。我来看看我是否能完全避免那个自由党。你的问题往好里说太宽泛了,往坏里说是基于观点的。也就是说,对于基本的非集合属性,您根本不需要任何额外的代码,因为WPF隐式地处理
INotifyPropertyChanged
的跨线程通知。WPF还具有内置的集合更改通知处理功能,但这需要在代码中进行一些初始设置,才能选择使用该功能。@PeterDuniho:我过去的结果好坏参半。有时UI会得到干净的更新,而不需要任何线程处理;有时它会引发跨线程封送异常,尤其是在计时器计时事件中更改道具时。我认为始终通过
DispatchHelper
来执行此操作是安全的。WPF还具有内置的集合更改通知处理功能,但这需要在代码中进行一些初始设置才能选择使用此功能。这方面有任何链接/提示吗?“我认为总是通过DispatchHelper这样做是安全的”——是的,没错。假设操作正确,那么明确地确保您处于正确的线程上是不会有任何伤害的,即使框架无论如何都会为您这样做。“有此方向的链接/提示吗?”--您是否在堆栈溢出中搜索了与WPF中的
INotifyCollectionChanged
相关的主题?不管怎样,你可以从这里开始:@PeterDuniho:谢谢。乔恩在那页上的回答似乎很有帮助。另外,我后来发现MVVMLight为每个平台(包括android、xamarin和.netfx)提供了一个版本的
Platform
库。我会看看我是否能完全避免这种自由。