跨線程操作無效好的,我知道為什么這會(huì)給我這個(gè)錯(cuò)誤:跨線程操作無效:控制從其創(chuàng)建的線程以外的線程訪問的“Form1”。但是......我怎樣才能使這個(gè)可行?System.Threading.Thread t = new System.Threading.Thread(()=>{
// do really hard work and then...
listView1.Items.Add(lots of items);
lots more UI work});t.Start();我不關(guān)心Thread何時(shí)或如何完成,所以我并不關(guān)心任何花哨或過于復(fù)雜的atm,除非在新的Thread中使用UI時(shí)會(huì)更容易。
2 回答

慕雪6442864
TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
你不能。必須在擁有的線程上執(zhí)行UI操作。期。
你可以做的是在子線程上創(chuàng)建所有這些項(xiàng)目,然后調(diào)用Control.Invoke
并在那里進(jìn)行數(shù)據(jù)綁定。
或者使用 BackgroundWorker
BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += (s, e) => { /* create items */ }; bw.RunWorkerCompleted += (s, e) => { /* databind UI element*/ }; bw.RunWorkerAsync();

RISEBY
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
從另一個(gè)線程訪問from的屬性時(shí),拋出此異常。要解決此問題,至少有兩個(gè)選項(xiàng)。
告訴控制不要拋出這些異常(不推薦):
Control.CheckForIllegalCrossThreadCalls = false;
使用線程安全函數(shù):
private void ThreadSafeFunction(int intVal, bool boolVal){ if (this.InvokeRequired) { this.Invoke( new MethodInvoker( delegate() { ThreadSafeFunction(intVal, boolVal); })); } else { //use intval and boolval }}
- 2 回答
- 0 關(guān)注
- 470 瀏覽
添加回答
舉報(bào)
0/150
提交
取消