無法將 lambda 表達式 轉換為類型“System.Delegate”,因為它不是委托類型


this.BeginInvoke(() =>
 {
     this.btnQuery.Enabled = false;  //禁用查詢
 });

跨線程調用時,編譯上面的代碼將提示

image

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

Invoke(new MethodInvoker(delegate { Text = "test"; }));

或者更簡單地,用Lambda表達式來解決問題:

Invoke(new MethodInvoker(() => Text = "test"));


免責聲明!

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



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