c#之委託(解決執行緒間操作無效)
阿新 • • 發佈:2020-08-15
之前剛接觸winform這東西的時候,需要實現一個數據回顯的功能,也就是將執行結果顯示在控制元件上。當時涉及到了多執行緒的場景,所以,我最初的設想就是執行緒得到執行結果後,直接呼叫控制元件新增一個Item,雖然我是這麼想的,但是人家程式語言顯然不是這麼想的,當場告訴我執行緒間操作無效,它無效,我笑了... ...
當時果斷選擇求助於搜尋引擎,在一番cv操作之後,功能實現了,今天恰好時間充裕,決定將c#好好重新捋一遍,當時為了儘快完成工作,心浮氣躁,草草看了些文件就開始搞起來,如今回想起那個資料回顯的功能,用到的技術就是c#中的委託。簡單來說,就是既然不允許直接呼叫某個方法,那麼,就使用委託來呼叫該方法,下面簡單記錄一下我對這個技術的理解。
委託
作用:
就是引用某個方法,我們可以通過委託來呼叫某個方法。
使用步驟:
- 宣告
- 例項化
- 使用
關鍵字:
delegate 示例如下:class Program {
//宣告委託,委託的形參列表和返回值型別必須與所要呼叫的方法一致 public delegate byte[] dele (int i); static void Main(string[] args) {
//例項化委託,例項化的引數為該委託呼叫的方法 dele de = new dele(IntForMatter.IntToByte);//使用委託呼叫方法 byte[] res = de(85596); foreach (byte r in res) { Console.WriteLine(r); } } }
用於測試委託的程式碼:
class IntForMatter { public static byte[] IntToByte (int parm) { byte[] res = newbyte[4]; for (int i = 0; i < 4; i++) { res[i] = (byte)(parm >> (i * 8) & 0xff); } return res; } }
(請忽略程式碼中不規範的命名方式... ...)