Une liaison DataGrid à une ObservableCollection remplie de manière asynchrone génère une erreur indiquant que les modifications apportées à SourceCollection ne sont pas autorisées à partir d'un thread non-Dispatcher.
Le problème vient de l'affinité du thread. L'ObservableCollection est initialement créée sur le thread d'interface utilisateur, ce qui la rend accessible uniquement à partir du thread d'interface utilisateur. Pour le modifier à partir d'un fil de discussion différent, le délégué doit être placé sur le répartiteur d'interface utilisateur.
<code class="csharp">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); }); } }</code>
En appelant le délégué sur le répartiteur d'interface utilisateur, les ajouts à ObservableCollection sont planifiés sur le thread de l'interface utilisateur, résolvant l'exception.
Pour la liaison asynchrone et l'actualisation du DataGrid, envisagez d'utiliser INotifyPropertyChanged sur vos propriétés ViewModel et d'appeler le Dispatcher pour actualiser le Éléments de l'interface utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!