今天在實驗delegate與thread
在初步的實驗結束后,因為原來的delegate只有一個函數會被調用,感覺沒有達到delegate的極致,所以又重新自己定義了一個delegate,在另一個線程
運行時調用這個delegate,其中有兩個函數會被順序調用。
一開始寫的很順利,點擊運行。生成第二個線程后,突然報出異常。說是不能再控件創建的線程外調用這個控件的屬性。
于是有些奇怪,因為只是加入了一個不痛不癢的函數而已。
回溯,發現問題。
原來原來調用delegate,是通過控件的invoke方法調用,而這次,是直接使用了delegate名稱直接調用。
通過invoke調用的話,程序會一直追溯回到主線程來調用程序修改參數值。
而直接調用delegate,相當于在當前線程下就會直接調用,從而出錯。
Mark this。
如果嫌這樣還要每次對相應的控件invoke麻煩的話,可以直接通過主窗體的invoke進行統一的調用。this.invoke(XXX);
新聞熱點
疑難解答