Trước hết, tôi đang sử dụng VS2005 và C# 2.0.C# 2.0 generics: Cách tạo đối tượng Action với tham số 0
Tôi đang cố gắng đặt hộp tổ hợp 'Thuộc tính văn bản từ bên trong sự kiện SelectedIndexChanged. Từ thread khác ở đây trên StackOverflow này đã được đề xuất thực hiện theo cách sau:
BeginInvoke(new Action(() => someCombobox.Text = "x"));
Bây giờ, trước hết này trả về một lỗi biên dịch cho tôi. Tôi tin rằng đó là vì đối tượng Hành động hoạt động khác nhau trong hai đặc tả ngôn ngữ. Trong C# 2.0, đối tượng Action dường như cần cấu trúc <T>
trong tất cả các khai báo. Có lẽ tôi sai, nhưng tôi muốn làm rõ điều đó.
gì làm việc như sau:
BeginInvoke(new Action<string>(delegate { someCombobox.Text = "x"; }), new object[] { "" });
Tuy nhiên, nó chỉ có vẻ rất lạ với tôi rằng tôi phải xác định các đối tượng hành động với một số loại (đặc biệt là kể từ khi tôi không có ý định vượt qua bất kỳ thông số nào)! Bằng cách nào đó loại bỏ tham số này cũng sẽ làm cho đối tượng rỗng mới [] lỗi thời, đó là những gì tôi muốn.
Có ai có thể giúp tôi đơn giản hóa cuộc gọi ở trên không?
Cuối cùng, có đảm bảo rằng BeginInvoke sẽ kết thúc sau khi SelectedIndexChanged và do đó cập nhật thuộc tính Văn bản của hộp kết hợp với văn bản chính xác không?
Tôi thực sự đánh giá cao việc tìm hiểu câu trả lời cho những câu hỏi này.
Lỗi biên dịch là do biểu thức lambda. Lambda là mới trong C# 3.0, và là một hình thức ngắn của cú pháp tạo đại biểu. –