Мертвые блокировки только произойдут, когда у Вас будет две или больше блокировки, которые могут быть aquired одновременно, и они захватываются в различном порядке.
Способы постараться не иметь мертвые блокировки:
Я искренне думаю, что BackgroundWorker
- наиболее элегантное решение для этой проблемы. Я не могу придумать более простого способа сделать это.
Ответ Чарли - это то, что вы действительно ищете.
Однако, если это возможно, вы можете посмотреть, можете ли вы распределить свою работу так, чтобы отдельные единицы работы были маленькие и не так сильно влияют на пользовательский интерфейс. Это позволит вам просто использовать Диспетчер напрямую. На странице WPF Threading есть хороший пример: https://msdn.microsoft.com/en-us/library/ms741870%28v=vs.100%29.aspx