Menyelesaikan "Operasi silang-thread tidak sah" Pengecualian dalam kemas kini UI
Ralat "Benang panggilan tidak dapat mengakses objek ini kerana benang yang berbeza memilikinya" biasanya berlaku ketika cuba mengubah suai elemen UI dari benang latar belakang. Ini kerana elemen UI dimiliki oleh benang utama. Garis yang bermasalah dalam kod anda ialah:
<code class="language-csharp">objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null;</code>
yang mungkin berinteraksi dengan UI (mis., Mengemas kini kotak teks) dari benang selain benang utama. objUDMCountryStandards.Country
Kaedah 1: Menggunakan Dispatcher.Invoke
berjalan pada benang utama: Invoke
<code class="language-csharp">this.Dispatcher.Invoke(() => { objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null; });</code>
Kaedah 2: Menggunakan Dispatcher.CheckAccess
digunakan: Dispatcher.Invoke
<code class="language-csharp">private void GetGridData(object sender, int pageIndex) { Standards.UDMCountryStandards objUDMCountryStandards = new Standards.UDMCountryStandards(); objUDMCountryStandards.Operation = "SELECT"; if (Dispatcher.CheckAccess()) { objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null; } else { this.Dispatcher.Invoke(() => { objUDMCountryStandards.Country = txtSearchCountry.Text.Trim() != string.Empty ? txtSearchCountry.Text : null; }); } DataSet dsCountryStandards = objStandardsBusinessLayer.GetCountryStandards(objUDMCountryStandards); // ... rest of your code }</code>
dan objUDMCountryStandards
dengan nama pembolehubah sebenar anda. txtSearchCountry
Atas ialah kandungan terperinci Bagaimana untuk memperbaiki 'benang panggilan tidak dapat mengakses objek ini kerana benang yang berbeza memilikinya' ralat dalam WPF?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!