gpt4 book ai didi

c# - 共享数据并添加到 ObservableCollection 时出现 InvalidCastException

转载 作者:行者123 更新时间:2023-11-30 14:51:46 24 4
gpt4 key购买 nike

我正在尝试使用共享契约(Contract)将数据从 Edge 发送到我的 UWP 应用程序。它就像一个魅力,除非我尝试将以这种方式收到的数据添加到 ObservableCollection<T> 中。我得到这个异常(exception):

InvalidCastException: Unable to cast COM object of type 'System.Collections.Specialized.NotifyCollectionChangedEventHandler' to class type 'System.Collections.Specialized.NotifyCollectionChangedEventHandler'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface.*

代码如下:

App.xaml.cs:

protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
if (this.SharingService != null)
await this.SharingService.OnShareTargetActivated(args);
}

共享服务.cs:

public delegate void UriAddedEventHandler(object sender, UriAddedEventArgs args);
public event UriAddedEventHandler UriAdded;

public async Task OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
var shareOperation = args.ShareOperation;

if (shareOperation.Data.Contains(StandardDataFormats.WebLink))
{
var uri = await shareOperation.Data.GetWebLinkAsync();

this.UriAdded?
.Invoke(this, new UriAddedEventArgs { Uri = uri });
}
}

ViewModel.cs:

public ViewModel(ISharingService sharingService)
{
sharingService.UriAdded += OnUriAdded;
}

public ObservableCollection<Uri> collection = new ObservableCollection<Uri>();

private async void OnUriAdded(object sender, UriAddedEventArgs args)
{
this.collection.Add(args.Uri));
}

当然,该集合绑定(bind)到页面上的一个元素。

当事件触发时,我似乎在不同的线程上(这并不奇怪),但是将操作包装在

await Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, ...)

没有改变任何东西,我仍然得到那个异常(exception)。有人知道这里发生了什么吗?

编辑:

为了它的值(value),我尝试使用 .NET native 工具链进行编译并发现了这个警告:

Warning : DEP0810 : This app references Microsoft.NET.Native.Runtime.1.1, version 1.1.23231.0, found in your SDK, but you have a higher version of Microsoft.NET.Native.Runtime.1.1 installed on the target machine, 1.1.23406.0. If you continue to run this application, it will run against the currently installed version, Microsoft.NET.Native.Runtime.1.1, version 1.1.23406.0. Consider updating your SDK to match the version of Microsoft.NET.Native.Runtime.1.1 that is installed.

是的,我开始怀疑这里存在某些版本冲突。我安装了最新的 Windows 10 SDK ( 10.0.26624.0 ),所以我不确定如何按照上述警告中的建议更新我的 SDK。

最佳答案

每个窗口(您的主应用程序和您的共享窗口)都有唯一的调度程序。

您不能将 UI 或调度程序从一个窗口直接引用到另一个窗口。

可以调用后台线程,然后使用其他窗口的调度程序。

我的建议是摆脱调度程序的所有全局 getter 并使用页面的调度程序 (this.Dispatcher)。最佳做法是使用要在其上显示内容的相应控件或页面的调度程序。

关于c# - 共享数据并添加到 ObservableCollection 时出现 InvalidCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com