2011-06-19 24 views

Trả lời

6

Hãy thử điều này:

this.Invoke((MethodInvoker) delegate 
{ 
    button1.Text = "hello world"; 
}); 

Mặc dù Action đã được giới thiệu trong .NET 2.0, bạn không thể sử dụng biểu thức lambda () => ... cú pháp trong .NET 2.0.

BTW, bạn vẫn có thể sử dụng Action trong .NET 2.0, miễn là bạn không sử dụng lambda sytax:

Action action = delegate { button1.Text = "hello world"; }; 
Invoke(action); 
+0

cái này hoạt động .. nhưng câu trả lời của aligray, tại sao nó lại bị lỗi đó .. Không thể chuyển đổi phương thức nặc danh thành 'System.Delegate' vì nó không phải là kiểu đại biểu .. tôi nghĩ, nó vẫn là tương tự.. –

1

Action<T> là chữ ký, mà chỉ có nghĩa là phương pháp thể hiện bằng hành động phải lấy một tham số. Loại tham số là gì, tùy thuộc vào chữ ký của cuộc gọi Invoke.

Một số ví dụ mã như thế nào để đại diện cho chữ ký khác nhau của Action:

var noArgs =() => button1.Text = "hello world"; // Action 
var oneArg = (arg) => button1.Text = "hello world"; // Action<T> 
var twoArgs = (arg1, arg2) => button1.Text = "hello world"; // Action<T,T> 

Nếu bạn không cần phải sử dụng các thông số để phương pháp, đó là tốt. Nhưng bạn vẫn cần khai báo chúng trong biểu thức lambda.

Bây giờ, điều này không trả lời làm thế nào để làm điều đó từ .NET 2.0, nhưng tôi giả định (có lẽ sai, sửa tôi nếu tôi sai) mà bạn không biết làm thế nào lambdas tương ứng với loại hành động.

Các vấn đề liên quan