Для меня решение было немного проще, мне просто нужно было очистить репозиторий: .m2 / repository / org / apache / maven / archetypes
Небольшое пояснение, хотя обычно существует только 1 поток пользовательского интерфейса, но может быть много потоков пользовательского интерфейса. Это верно как для WPF, так и для WinForms.
Но лучший способ достичь этого - использовать SynchronizationContext. И WPF, и WinForms устанавливают SynchronizationContext в любом потоке, в котором они запускают пользовательский интерфейс. Это функция, которую я использую, если я не привязан к какой-либо конкретной модели пользовательского интерфейса.
public bool IsPossiblyUIThread() {
return SynchronizationContext.Current != null;
}
Обратите внимание, она никоим образом не является надежной. Компоненты, не относящиеся к пользовательскому интерфейсу, могут установить SynchronizationContext, и это вернет истину для простого рабочего потока. Отсюда не авторитетное название.
несколько более надежный способ сделать это следующим образом. Но для реализации требуется ссылка хотя бы на часть WPF.
public bool IsLikelyWpfUIThread() {
var context = SynchronizationContext.Current;
return context != null && context is DispatcherSynchronizationContext;
}
Диспетчер. CheckAccess () возвращает истину, если ваш код работает в том же потоке, что и Диспетчер. Он должен работать, если есть только один Dispatcher / UIThread.