ホームページ > バックエンド開発 > C++ > 「この種類の CollectionView は、ディスパッチャー スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」を解決する方法は?

「この種類の CollectionView は、ディスパッチャー スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」を解決する方法は?

Linda Hamilton
リリース: 2024-10-31 09:39:01
オリジナル
530 人が閲覧しました

How to Resolve

エラー: 「このタイプの CollectionView は、ディスパッチャー スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません。」

問題:

UI スレッド以外のスレッドで ObservableCollection を変更するとエラーが発生します。

解決策:

1. Dispatcher.Invoke の使用:

別のスレッドから ObservableCollection を更新するには、Dispatcher.Invoke を使用して UI スレッドで変更を呼び出します。

public void Load()
{
    matchList = new List<GetMatchDetailsDC>();
    matchList = proxy.GetMatch().ToList();

    foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            _matchObsCollection.Add(match);
        });
    }
}
ログイン後にコピー

2. async/await の使用:

または、async/await を使用して、UI スレッドで Load メソッドを非同期に実行できます。

public void LoadAsync()
{
    Task.Run(async () =>
    {
        matchList = new List<GetMatchDetailsDC>();
        matchList = await proxy.GetMatchAsync();

        await Dispatcher.InvokeAsync(() =>
        {
            foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
            {
                _matchObsCollection.Add(match);
            }
        });
    });
}
ログイン後にコピー

DataGrid バインディングとリフレッシュ:

バインディング:

<DataGrid ItemsSource="{Binding MatchObsCollection}"/>
ログイン後にコピー

非同期更新:

DataGrid を非同期的に更新するには、Refresh メソッドを呼び出します。デリゲート内のディスパッチャーのメソッド。

public void RefreshDataGridAsync()
{
    Task.Run(() =>
    {
        Dispatcher.InvokeAsync(() =>
        {
            dataGridParent.ItemsSource = null;
            dataGridParent.ItemsSource = MatchObsCollection;
        });
    });
}
ログイン後にコピー

以上が「この種類の CollectionView は、ディスパッチャー スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート