Какова рабочая процедура ISynchronizeInvoke
?
Как работать с ним на С#?
Какова рабочая процедура ISynchronizeInvoke
?
Как работать с ним на С#?
Это в основном описывает способ нажатия на работу между потоками; для того чтобы направить элемент работы на другой поток, используйте либо Invoke
(синхронно), либо BeginInvoke
(асинхронный - в идеале вызов EndInvoke
позже). Аналогично, InvokeRequired
используется для запроса "нужно ли мне это делать?" Или я могу сам выполнить эту работу? ".
Наиболее распространенное использование этого интерфейса - в виде окон, где оно является частью того, как нажимать работу на поток пользовательского интерфейса; вы можете, конечно, использовать Control.Invoke
/Control.BeginInvoke
одинаково, но элементы управления формой реализуют этот интерфейс, чтобы позволить абстракцию - поэтому нисходящий код не должен привязываться к формам окон. В случае с формами InvokeRequired
означает "я ли поток пользовательского интерфейса?".
В действительности, я не уверен, что это распространено, чтобы использовать его напрямую. Чаще всего обрабатываются события в пользовательском интерфейсе, а пользовательский интерфейс выполняет переключение потоков с использованием наиболее подходящего локального механизма.
Типичное использование:
obj.Invoke((MethodInvoker) SomeMethod);
который выполняет (через делегат) SomeMethod
в потоке, управляемом obj
(который реализует интерфейс).
Интерфейс ISynchronizeInvoke обеспечивает синхронное и асинхронное связь между объектами возникновение события. Объекты которые реализуют этот интерфейс, могут получать уведомление о том, что событие и они могут реагировать на запросы о событии. В этом случае, клиенты могут гарантировать, что один запрос была обработана до подачи последующий запрос, который зависит от завершение первого.
Также см.
http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx