Ваша функция Main () уже имеет атрибут [STAThread], она скрыта в автоматически сгенерированном коде для WPF.Это ни на что не влияет, кроме как на метод Main ().Это гарантирует, что основной поток приложения WPF (он же поток пользовательского интерфейса) создает «однопоточную квартиру».Это делается CLR до запуска любого кода в вашем приложении.
STA является жестким требованием для потоков пользовательского интерфейса, так как это требуется для многих компонентов COM.STA обеспечивает безопасный дом для программного обеспечения, которое не является поточно-ориентированным.При этом «однопоточный».OpenFileDialog - это один из таких компонентов, другие - поддержка буфера обмена и перетаскивания.
И многие, многие COM-компоненты, которые пытаются найти дом в вашем приложении.В случае OpenFileDialog это расширения оболочки, которые настраивают внешний вид представления папки.
Короче говоря, проблема, несомненно, заключается в том, что вы пытаетесь отобразить диалоговое окно в рабочем потоке.Не могу сделать.Используйте Dispatcher.BeginInvoke () для перенаправления вызовов в поток пользовательского интерфейса.