「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 「この種類の CollectionView は、Dispatcher スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」というメッセージが表示されるのはなぜですか?

「この種類の CollectionView は、Dispatcher スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません」というメッセージが表示されるのはなぜですか?

2024 年 11 月 4 日に公開
ブラウズ:929

Why Am I Getting \

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

指定されたエラー メッセージ、「このタイプCollectionView の は、Dispatcher スレッドとは異なるスレッドからの SourceCollection への変更をサポートしていません。」は、非 UI スレッドから ObservableCollection を変更しようとする試みを示します。

提供されたコードで説明されているように、ViewModel の Load( ) メソッドは、GetMatchDetailsDC オブジェクトのリストから _matchObsCollection ObservableCollection を設定します。ただし、この更新は UI スレッドの外部で実行されます。

スレッド アフィニティとディスパッチャー

WPF では、DataGrid などの UI 要素は UI スレッド上に作成され、スレッドの親和性。これらの要素に対する変更は、スレッドの安全性を確保するために UI スレッドから実行する必要があります。

エラーの解決

この問題を解決するには、App.Current.Dispatcher.Invoke(( Action)delegate { ... }) メソッドを使用して、UI スレッドでコレクションの更新を呼び出します:

matchList = proxy.GetMatch().ToList();

foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
    App.Current.Dispatcher.Invoke((Action)delegate  // 

WPF での非同期データの読み込み

データの読み込みに非同期メソッドを使用するのは一般的ですが、非 UI スレッドから UI 要素を操作する場合はスレッド セーフを考慮することが重要です。スレッド関連のエラーを回避するために、ObservableCollection の変更など、UI 要素の更新は必ず UI スレッドで実行されるようにしてください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3