任何人都可以建議爲什麼這行代碼不能編譯?它產生CS1660來代替:十字線程調用編譯問題
s.run_button.Invoke((b) => { b.Enabled = false; },
new object[] { s.run_button });
Visual Studio中說:無法轉換lambda表達式鍵入「System.Delegate」,因爲它不是一個委託類型
任何人都可以建議爲什麼這行代碼不能編譯?它產生CS1660來代替:十字線程調用編譯問題
s.run_button.Invoke((b) => { b.Enabled = false; },
new object[] { s.run_button });
Visual Studio中說:無法轉換lambda表達式鍵入「System.Delegate」,因爲它不是一個委託類型
Lambda表達式本身沒有類型,並且不轉換爲System.Delegate
。 Invoke
方法的類型爲System.Delegate
,因此它不會編譯,因爲lambda表達式沒有類型。您需要在此處提供明確的類型轉換
s.run_button.Invoke(
(Action<Button>)((b) => { b.Enabled = false; }),
new object[] { s.run_button });
Invoke方法接受類型爲Delegate的參數。它是在拉姆達達進入我們的世界之前寫的。最簡單的解決方案是用一個Action包裝你的lambda。我不確定究竟是什麼類型的「b」(並且C#編譯器也沒有,因此錯誤),所以你必須明確地傳遞它。例如:
s.run_button.Invoke(new Action<Button>(b => b.Enabled = false), new object[] { s.run_button });
謝謝,正是我所需要的。 – Segfault 2010-07-29 16:42:43