Использование InvokeRequired и control.InvokeRequired - PullRequest
10 голосов
/ 09 февраля 2009

В чем разница между InvokeRequired и somecontrol.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;
    }
}

Ответы [ 3 ]

20 голосов
/ 09 февраля 2009

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

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

3 голосов
/ 09 февраля 2009

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

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

2 голосов
/ 09 февраля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...