今天在實(shí)驗(yàn)delegate與thread
在初步的實(shí)驗(yàn)結(jié)束后,因?yàn)樵瓉?lái)的delegate只有一個(gè)函數(shù)會(huì)被調(diào)用,感覺(jué)沒(méi)有達(dá)到delegate的極致,所以又重新自己定義了一個(gè)delegate,在另一個(gè)線程
運(yùn)行時(shí)調(diào)用這個(gè)delegate,其中有兩個(gè)函數(shù)會(huì)被順序調(diào)用。
一開(kāi)始寫的很順利,點(diǎn)擊運(yùn)行。生成第二個(gè)線程后,突然報(bào)出異常。說(shuō)是不能再控件創(chuàng)建的線程外調(diào)用這個(gè)控件的屬性。
于是有些奇怪,因?yàn)橹皇羌尤肓艘粋€(gè)不痛不癢的函數(shù)而已。
回溯,發(fā)現(xiàn)問(wèn)題。
原來(lái)原來(lái)調(diào)用delegate,是通過(guò)控件的invoke方法調(diào)用,而這次,是直接使用了delegate名稱直接調(diào)用。
通過(guò)invoke調(diào)用的話,程序會(huì)一直追溯回到主線程來(lái)調(diào)用程序修改參數(shù)值。
而直接調(diào)用delegate,相當(dāng)于在當(dāng)前線程下就會(huì)直接調(diào)用,從而出錯(cuò)。
Mark this。
如果嫌這樣還要每次對(duì)相應(yīng)的控件invoke麻煩的話,可以直接通過(guò)主窗體的invoke進(jìn)行統(tǒng)一的調(diào)用。this.invoke(XXX);
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注