Adressant l'exception "Opération transversale" dans WPF Multithreading
Les applications WPF multithread nécessitent une gestion minutieuse de l'affinité thread. Chaque élément d'interface utilisateur WPF est lié à un thread spécifique (généralement le thread d'interface utilisateur principal). Tenter d'accéder ou de modifier un élément d'interface utilisateur à partir d'un thread différent entraîne l'infâme "Le thread d'appel ne peut pas accéder à cet objet car un thread différent le possède" Exception.
Dépannage de votre code
Votre problème découle de la tentative de mise à jour des éléments d'interface utilisateur dans la méthode GetGridData
, qui s'exécute probablement sur un thread d'arrière-plan (par exemple, via BackgroundWorker
ou Task
). La solution réside dans le rassemblement des mises à jour de l'interface utilisateur au fil principal.
La solution de répartiteur
L'objet Dispatcher
fournit le mécanisme pour exécuter en toute sécurité le code sur le thread d'interface utilisateur. Voici comment refacter votre méthode GetGridData
:
<code class="language-csharp">private void GetGridData(object sender, int pageIndex) { Standards.UDMCountryStandards objUDMCountryStandards = new Standards.UDMCountryStandards(); objUDMCountryStandards.Operation = "SELECT"; objUDMCountryStandards.Country = string.IsNullOrEmpty(txtSearchCountry.Text.Trim()) ? null : txtSearchCountry.Text; // Use Dispatcher.Invoke to update UI elements on the main thread this.Dispatcher.Invoke(() => { DataSet dsCountryStandards = objStandardsBusinessLayer.GetCountryStandards(objUDMCountryStandards); // ... Your UI update code here ... e.g., // dataGrid.ItemsSource = dsCountryStandards.Tables[0].DefaultView; }); }</code>
En enveloppez votre code modifiant l'interface utilisateur dans this.Dispatcher.Invoke(() => { ... })
, vous garantissez que ces opérations se produisent sur le fil qui possède les éléments d'interface utilisateur, empêchant l'exception de la transmission. Cela garantit la sécurité des fils et maintient l'intégrité de votre application WPF.
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!