Блокировка на диспетчере

1
lock
{
  Dispatcher.BeginInvoke(DispatcherPriority.Send, (SendOrPostCallback)delegate(object o)
 {
   DoSomething();
 }
}

Сохраняется ли блокировка до тех пор, пока Диспетчер не завершит свое исполнение или не будет выпущен вскоре после отправки DoSomething(); для выполнения Диспетчер?

Теги:
wpf

1 ответ

2
Лучший ответ
  • Блокировка сохраняется, пока код в секции lock {} завершит выполнение.
  • В вашем случае это означает: до тех пор, пока Dispatcher.BeginInvoke завершит свое выполнение.
  • И поскольку Dispatcher.BeginInvoke выполняет асинхронно, это означает, что блокировка будет выпущена почти "немедленно" - DoSomething() может начаться в тот момент, когда блокировка уже выпущена.
  • 1
    +1 Мои два цента: в этом случае lock бесполезна, если она не находится внутри delegate или DoSomething .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню