Если вы убедитесь (например, в статических членах класса), что у вас есть удобная ссылка на пользовательский интерфейс Dispatcher
, вы можете сделать это:
public static void Run( Action a ) {
if ( !_uiDispatcher.CheckAccess() ) {
_uiDispatcher.BeginInvoke( a );
}
else {
a();
}
}
Одна или две инфраструктуры MVVM IВы уже делали что-то вроде этого.
Если вы не хотите передавать эту ссылку Dispatcher
в библиотеку, контейнеры IoC являются опцией.Вы также можете поместить это в Common.dll для классов и интерфейсов, на которые должны ссылаться как exe, так и библиотеки классов.Exe может установить правильную ссылку, а библиотека классов может вызвать метод Run()
.