更改 ObservableCollection 时 Xamarin.Forms UWP (Windows) 应用程序中的 System.Runtime.InteropServices.COMExcep
Posted
技术标签:
【中文标题】更改 ObservableCollection 时 Xamarin.Forms UWP (Windows) 应用程序中的 System.Runtime.InteropServices.COMException【英文标题】:System.Runtime.InteropServices.COMException in Xamarin.Forms UWP (Windows) App when changing ObservableCollection 【发布时间】:2021-07-21 06:17:12 【问题描述】:我有一个 Xamarin.Forms 应用程序(.NET Standard 2.0、Xamarin.Forms 4.8),到目前为止,我只将其用于 android 项目,它的工作原理非常棒。不过,我刚刚重新激活了 UWP (Universal Windows) 项目,该项目也可以正常编译,但是当我尝试运行它时,我填充的第一个 ObservableCollection(从主页的 OnAppearing 触发)会导致上述异常:
System.Runtime.InteropServices.COMException
HResult=0x8001010E
应用程序调用了为不同线程编组的接口。 [德语原文:Eine Schnittstelle, die für einen anderen Thread marshalled war, wurde von der Anwendung aufgerufen。] HRESULT 异常:0x8001010E (RPC_E_WRONG_THREAD)
我一般都知道这种类型的错误信息(我在其他项目中一直遇到它们^^),因为列表的更新不会发生在UI线程上,因此数据绑定不愉快。通常我会将它包装在一些调度程序中(我的研究特别建议使用Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync
)。除了处理实际列表的代码当然是在我单独的 View Model 项目(.NET Standard 2.0)中,它应该与系统无关(因为它也被 Android 项目使用),并且提到的调度程序是 Windows 特定的,所以这个解决方案对我来说有点不可用。
我能做些什么来解决这个问题?我可以在这里使用某种 Xamarin 或 .NET Standard 调度程序吗?或者有没有其他方法可以修改,UWP 应用程序如何...进行数据绑定或其他什么?!
【问题讨论】:
docs.microsoft.com/en-us/xamarin/essentials/main-thread 这太容易了...您能否快速将其发布为正确答案,以便我可以将其标记为解决方案@Jason? 【参考方案1】:使用 Xamarin Essentials MainThread 助手
【讨论】:
以上是关于更改 ObservableCollection 时 Xamarin.Forms UWP (Windows) 应用程序中的 System.Runtime.InteropServices.COMExcep的主要内容,如果未能解决你的问题,请参考以下文章
当 Item 改变时通知 ObservableCollection
如何根据 WPF DataGrid 中的更改更新 ObservableCollection 项属性?
属性更改通知(INotifyPropertyChanged)——针对ObservableCollection