2013-08-16 2 views
0

Каждая статья, которую я прочитал о SynchronizationContext, рассказывает об управлении элементами формы. Это единственная цель SynchronizationContext?Используется ли SynchronizationContext только для WPF, Win форм?

И я должен также просить основную вещь: Почему я не делаю блокировку для каждого элемента управления, если я использую его, если поток пользовательского интерфейса? почему мне нужно все это «SynchronizationContext» для связи с элементами управления? Я имею в виду, разве это лучший способ связаться с элементами управления? (Я знаю, что это не сработает).

Статьи:

http://blogs.msdn.com/b/csharpfaq/archive/2010/06/18/parallel-programming-task-schedulers-and-synchronization-context.aspx

http://reedcopsey.com/2010/03/18/parallelism-in-net-part-15-making-tasks-run-the-taskscheduler/

..

+0

Я не вижу никакого отношения b/w lock и 'SynchronizationContext' Что вы подразумеваете под этим' Почему can not я делаю блокировку для каждого элемента управления до того, как я использую, если поток пользовательского интерфейса использует его? почему мне нужен весь этот «SynchronizationContext»? –

+0

, если SynchronizationContext предоставил мне потокобезопасный способ связи с элементами управления, я могу сделать простой блокировку. Я прав? –

+0

Нет, блокировка реализована на основе класса «Монитор», который гарантирует, что только один поток может выполнять критический раздел кода за раз. тогда как 'SynchronizationContext' используется для выполнения некоторого кода в контексте другого потока или того же. Обычно мы используем 'SynchronizationContext' для выполнения кода в другом потоке (как правило, для потока пользовательского интерфейса). Это понятно? –

ответ

0

SynchronizationContext может быть использована для выполнения работы в контексте любой другой нити.

Здесь есть главное предостережение: другая часть должна быть подготовлена ​​для этого, например. г. используя насос сообщений, например, потоки пользовательского интерфейса в WinForm и WPF. Кроме того, эти потоки пользовательского интерфейса всегда имеют SynchronizationContext, тогда как другие типы потоков обычно не работают.

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

This article on codeproject весьма полезно, например https://stackoverflow.com/a/4107653/586754.