C#--無法將lambda表達式轉換為類型‘Delegate’,原因是它不是委托類型


報錯如下:

 

主要是為了在子線程中更新UI線程

 對於Control.Invoke()來說,任何的代理類型都是可接受的,也就是說ThreadStart和MethodInvoker都是可以接受的類型。這樣編譯器反而不知道應該用哪個代理去匹配匿名函數了,導致了編譯錯誤的發生。
知道了原因,問題就很容易解決了。我們只需要加上MethodInvoker這個wrapper就能使用匿名函數了。

this.label7.Invoke(new MethodInvoker(delegate { this.label7.Text = msg.strMsg; }));

或者用lamada表達式:
this.label7.Invoke(new MethodInvoker(() => this.label7.Text = msg.strMsg));

 

// 以下為委托的幾種寫法

             1、 this.Invoke( (MethodInvoker)(()=> { …方法體…}));

             2、 this.Invoke( (MethodInvoker) delegate{…方法體…});

             3、this.Invoke( new MethodInvoker (()=> { …方法體…}));

             4、 this.Invoke( new MethodInvoker (delegate{…方法體…}));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM