关闭 OpenFileDialog 会导致应用程序挂起 3-4 秒

Bla*_*Box 5 c# wpf multithreading openfiledialog mahapps.metro

在我WPF使用Caliburn.MicroMahApps.Metro框架的应用程序中,我打开OpenFileDialogSystem.Windows.Forms命名空间中的实例。打开和关闭此对话框后,我的应用程序的其余部分挂起大约 3 到 4 秒。使用Microsoft.Win32命名空间时也是如此。

我自己做了一些研究,并提出了一些抱怨同一问题的帖子,他们找到的解决方案有两个:

  1. 快速修复:将ShowHelp属性设置为true
  2. 正确修复:确保它在Single Threaded Apartment模式下运行。

ShowHelp修复程序通过使用非 vista 样式对话框对我有用,但从UXWindows Vista 和更新版本的角度来看,它看起来不正确。对我来说另一件事是确保它处于STA模式下。

WPFSTA默认情况下使用,但我尝试编写自己的主要方法并明确说明[STA]但没有运气。我将以下代码段添加到我的代码中,但输出为State: STA,表明应该没有问题。

Console.WriteLine("State: {0}", System.Threading.Thread.CurrentThread.GetApartmentState());
var dialog = new OpenFileDialog
Run Code Online (Sandbox Code Playgroud)

我也试过OpenFileDialog在一个新STA线程上启动它,虽然它启动并且没有挂起我的应用程序,但它也不再是模态的。我也尝试加入新线程,但关闭后它仍然挂起。

是否存在已知的潜在问题,OpenFileDialog如果有,是否有启动 FileDialogs 的替代方法可以避免这种挂起?

来源ShowHelpSTA评论: