2010-01-24 3 views
3

Я заметил, что когда «давая фокус» обратно в ваш основной поток при вызове из другого потока вы можете либо вызвать «это», либо элемент управления, который вы хотите to, well invoke. Я заметил, что это не имеет значения, когда вы отдаете контроль, так что может кто-нибудь объяснить, почему я бы вызвал контроль над основным потоком? Это имеет значение, или основной поток неявно вызывается?Вызов темы. NET.this против .control

Would,

this.Invoke(InvokedMethod,args) 

отличаться от

button1.Invoke(InvokedMethod,args) 

Когда button1 на моей главной форме.

ответ

2

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

2

Методы Invoke определены классом Control.

Таким образом, они доступны из любого экземпляра Control.

Когда вы пишете форму, ваш класс наследует класс Form, который (косвенно) наследует Control. Поэтому они также доступны через экземпляр this.

Не имеет значения, какой из них вы выберете.

+0

Так что, ссылаясь на мой контроль, автоматически вызывается моя основная форма? Если я вызову один элемент управления в основной форме, будут ли вызываться другие элементы управления в этой же форме? –

+2

Что значит? Вызов 'Invoke' будет выполнять метод в потоке пользовательского интерфейса. Это не имеет никакого отношения к определенному контролю. – SLaks

+0

Я получил. Благодаря! –

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