Как использовать интерфейс ISynchronizeInvoke?

Какова рабочая процедура ISynchronizeInvoke?

Как работать с ним на С#?

Ответ 1

Это в основном описывает способ нажатия на работу между потоками; для того чтобы направить элемент работы на другой поток, используйте либо Invoke (синхронно), либо BeginInvoke (асинхронный - в идеале вызов EndInvoke позже). Аналогично, InvokeRequired используется для запроса "нужно ли мне это делать?" Или я могу сам выполнить эту работу? ".

Наиболее распространенное использование этого интерфейса - в виде окон, где оно является частью того, как нажимать работу на поток пользовательского интерфейса; вы можете, конечно, использовать Control.Invoke/Control.BeginInvoke одинаково, но элементы управления формой реализуют этот интерфейс, чтобы позволить абстракцию - поэтому нисходящий код не должен привязываться к формам окон. В случае с формами InvokeRequired означает "я ли поток пользовательского интерфейса?".

В действительности, я не уверен, что это распространено, чтобы использовать его напрямую. Чаще всего обрабатываются события в пользовательском интерфейсе, а пользовательский интерфейс выполняет переключение потоков с использованием наиболее подходящего локального механизма.

Типичное использование:

obj.Invoke((MethodInvoker) SomeMethod);

который выполняет (через делегат) SomeMethod в потоке, управляемом obj (который реализует интерфейс).

Ответ 2

Интерфейс ISynchronizeInvoke

Интерфейс ISynchronizeInvoke обеспечивает синхронное и асинхронное связь между объектами возникновение события. Объекты которые реализуют этот интерфейс, могут получать уведомление о том, что событие и они могут реагировать на запросы о событии. В этом случае, клиенты могут гарантировать, что один запрос была обработана до подачи последующий запрос, который зависит от завершение первого.

Также см.

http://blogs.msdn.com/jaredpar/archive/2008/01/07/isynchronizeinvoke-now.aspx