2009-02-09 3 views
10

В чем разница между InvokeRequired и somecontrol.InvokeRequired?Использование InvokeRequired vs control.InvokeRequired

как это,

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; 
    } 
} 

ответ

20

Первая версия проверяет нить, ответственную за это управления. Вторая версия проверяет поток, ответственный за someControl. (И то же самое, для потока управления, который затем делегирует вызов.)

Они могут быть разными - хотя они действительно не должны быть, если два элемента управления находятся в одном верхнем уровне окна. (Все элементы управления в одном окне должны работать на одной и той же резьбе.)

3

Разница заключается в том, что вы контролируете доступ к объекту. Если вы получаете доступ к InvokeRequired из метода в форме, вы фактически получаете доступ к свойству InvokeRequired формы.

Если форма и someControl созданы в одном потоке, то они возвратят то же значение.

2

Похоже, что вы в первом примере находятся в рамках элемента управления, а во втором - нет. Основная форма - это контроль, как и любой другой. Если someControl добавлен в коллекцию Control основного элемента управления, вы можете использовать либо.

Смежные вопросы