Bạn có thể thêm phương pháp này mở rộng mà tôi thường xuyên sử dụng (tương tự như trong kỹ thuật để trả lời @ JaredPar của):
/// <summary>
/// Extension method that allows for automatic anonymous method invocation.
/// </summary>
public static void Invoke(this Control c, MethodInvoker mi)
{
c.Invoke(mi);
return;
}
Sau đó bạn có thể sử dụng trên bất kỳ Control (hoặc các dẫn xuất) natively trong mã của bạn qua:
// "this" is any control (commonly the form itself in my apps)
this.Invoke(() => label.Text = "Some Text");
Bạn cũng có thể thực hiện nhiều phương pháp thông qua phương pháp vô danh qua:
this.Invoke
(
() =>
{
// all processed in a single call to the UI thread
label.Text = "Some Text";
progressBar.Value = 5;
}
);
Ghi nhớ rằng nếu các luồng của bạn đang cố gắng Gọi trên một điều khiển được xử lý, bạn sẽ nhận được một ObjectExposedException. Điều này xảy ra nếu một chủ đề chưa bị hủy bỏ bởi ứng dụng đang tắt. Bạn có thể "ăn" ObjectDisposedException bằng cách gọi Invoke() xung quanh, hoặc bạn có thể "ăn" ngoại lệ trong phần mở rộng phương thức Invoke().
Tôi cho rằng bạn có nghĩa là bạn đang bị loại trừ vì bạn cố đặt thuộc tính Văn bản nhãn từ một chuỗi khác? – zebrabox
Yeah :(Nó được sắp xếp khá nhiều bây giờ – Lawrence