Используется ли SynchronizationContext только для форм WPF, Win?

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

И я также должен спросить одну простую вещь: почему я не могу просто заблокировать каждый элемент управления, прежде чем использовать его, если поток пользовательского интерфейса использует его? зачем мне нужен весь этот "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/

..


person Stav Alfi    schedule 16.08.2013    source источник
comment
Я не вижу никакой связи ч/б блокировки и SynchronizationContext Что вы имеете в виду под этим Why cant I just do a lock on each control befor i use if the UI thread use it? why i need all this "SynchronizationContext"?   -  person Sriram Sakthivel    schedule 16.08.2013
comment
если SynchronizationContext предоставил мне потокобезопасный способ связи с элементами управления, я могу установить простую блокировку. Я прав?   -  person Stav Alfi    schedule 16.08.2013
comment
Нет, блокировка реализована на основе класса Monitor, который гарантирует, что только один поток может одновременно выполнять критическую часть кода. тогда как SynchronizationContext используется для выполнения некоторого кода в контексте другого потока или того же самого. Обычно мы используем SynchronizationContext для выполнения кода в другом потоке (обычно в потоке пользовательского интерфейса). Это понятно?   -  person Sriram Sakthivel    schedule 16.08.2013
comment
почти, какое еще использование SynchronizationContext имеет? зачем мне останавливать выполнение потока для другого кода, который другой поток сказал ему запустить? и ты не ответил на то, что я спросил, (я знаю, что это так не работает..)   -  person Stav Alfi    schedule 16.08.2013
comment
Не могли бы вы уточнить, я знаю, что это так не работает?   -  person Sriram Sakthivel    schedule 16.08.2013


Ответы (1)


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

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

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

Эта статья о codeproject довольно полезна, например https://stackoverflow.com/a/4107653/586754.

person Andreas Reiff    schedule 30.09.2015