【问题标题】:Dispatcher.RunAsync (The application called an interface that was marshalled for a different thread.)Dispatcher.RunAsync(应用程序调用了为不同线程编组的接口。)
【发布时间】:2016-03-24 13:08:58
【问题描述】:

应用程序调用了一个为不同线程编组的接口。 (来自 HRESULT 的异常:0x8001010E (RPC_E_WRONG_THREAD))

在我的一个视图中,我在其中实例化了一个选项视图。

不确定 的选项是否应该是一个完全独立的对象。

当用户修改选项时,我希望它更新主视图。

实例化的第一个视图。

    public VideosFoundView()
    {
        this.InitializeComponent();
        this.initAddVideoFolderGridView();
        this.addVideoFolderScrollViewer.ViewChanged += addVideoFolderScrollViewer_viewChanged;
        options = new vfvOptions();
        options.PropertyChanged += optionsChanged;
        AppShell.Current.SetOptions(options);
    }

如您所知,我在父视图的构造函数中实例化了 vfvOptions 视图,但是 optionsChanged 方法难以访问我在父视图中定义的内容。

    private async void optionsChanged(object sender, PropertyChangedEventArgs e)
    {
        await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
        {           
            //parse the options object   
            await Task.Run(() => 
            {
                this._GridViewVideoModels.Clear();
                for (int i = 0; i < VideosFoundView.MyVideoModels.Count - 1; i++)
                {
                    bool displayTile = true;

                    if (options.IgnoreImagesNotFound)
                        if (VideosFoundView.MyVideoModels[i].FullImageLocationOnDisk == "ms-appx:///Assets/image-not-found.gif")
                            displayTile = false;

                    if (displayTile)
                    {
                        this._GridViewVideoModels.Add(VideosFoundView.MyVideoModels[i]);                        
                    }
                }                   
                this.AddVideoFolderGridView.ItemsSource = _GridViewVideoModels;                                
            });
        });
    }

以上代码在以下位置遇到异常:

   this._GridViewVideoModels.Clear();

在 ViewFoundView 类中定义如下:

    public ObservableCollection<MyVideo> _GridViewVideoModels = new ObservableCollection<MyVideo>();

我可能对事件没有深入了解,事件触发的时候是vfvOptions类/对象内部触发的optionsChanged方法吗?

【问题讨论】:

    标签: c# multithreading winforms


    【解决方案1】:

    问题是因为我从 Task.Run() 中调用了该方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-21
      • 1970-01-01
      • 2011-04-05
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-20
      相关资源
      最近更新 更多