更改 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

如何在分配的变量值更改时停止变量更改C#

DataGrid单元格更改后,ObservableCollection不会更新

更改源时DataGrid更新不起作用