2009-02-09 27 views
10

Sự khác nhau giữa InvokeRequiredsomecontrol.InvokeRequired là gì?Sử dụng InvokeRequired vs control.InvokeRequired

như thế này,

delegate void valueDelegate(string value); 

private void SetValue(string value) 
{ 
    if (InvokeRequired) 
    { 
     BeginInvoke(new valueDelegate(SetValue),value); 
    } 
    else 
    { 
     someControl.Text = value; 
    } 
} 

delegate void valueDelegate(string value); 

private void SetValue(string value) 
{ 
    if (someControl.InvokeRequired) 
    { 
     someControl.Invoke(new valueDelegate(SetValue),value); 
    } 
    else 
    { 
     someControl.Text = value; 
    } 
} 

Trả lời

20

Phiên bản đầu tiên kiểm tra các chủ đề trách nhiệm kiểm soát này. Phiên bản thứ hai kiểm tra luồng chịu trách nhiệm cho someControl. (Và ditto mà chủ đề của kiểm soát họ sau đó ủy thác lời gọi đến.)

Chúng có thể khác nhau - mặc dù chúng thực sự là không nên nếu hai điều khiển nằm trong cùng một cửa sổ cấp cao nhất. (Tất cả các điều khiển trong một cửa sổ sẽ chạy trên cùng một chuỗi.)

3

Sự khác biệt là sự kiểm soát mà bạn truy cập vào thuộc tính. Nếu bạn truy cập InvokeRequired từ bên trong một phương thức trên biểu mẫu, bạn đang truy cập hiệu quả thuộc tính InvokeRequired của biểu mẫu.

Nếu biểu mẫu và someControl được tạo trong cùng một chuỗi, thì chúng sẽ trả về cùng một giá trị.

2

Dường như bạn trong ví dụ đầu tiên nằm trong phạm vi của điều khiển, trong khi trong lần thứ hai bạn thì không. Các hình thức chính là một điều khiển giống như bất kỳ khác. Nếu someControl được thêm vào bộ sưu tập Điều khiển của điều khiển chính, bạn cũng có thể sử dụng.

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