【发布时间】:2014-06-25 19:04:04
【问题描述】:
我想先说这不会发生在所有计算机上(在 Windows 7、Windows 8、Windows 8.1 中测试)——只是我的开发机器,无论我是否处于调试或发布模式,无论是否不是我用完了 Visual Studio,或者正在运行可执行文件。我怀疑这不是一个常见问题,不仅因为它似乎不会在其他人的机器上崩溃,而且还因为在论坛中报告此问题的在线人员很少。
这是一个 WPF MVVM 应用程序,使用 .NET Framework 4.5 在 Visual Studio 2012 中用 VB.NET 编写。该应用程序的架构是对Josh Smith's MVVM demo 的定制。
在这个应用程序中,我需要用户能够在一个地方选择一个文件,而在其他三个地方,他们需要能够选择一个文件夹。对于单个文件,我使用 Microsoft.Win32.OpenFileDialog,但对于文件夹选择器,我使用 System.Windows.Forms.FolderBrowserDialog 的三个实例。
现在,似乎只在我的机器上发生的行为(Windows 8.1 64 位操作系统)。当我打开默认为桌面的 FolderBrowserDialog 时,作为第一个操作,我可以选择作为桌面及其子文件夹的任何文件夹。然而,当我选择“这台电脑”(或旧世界的我的电脑)时,对话框一侧的滚动条出现,用户界面似乎会自行调整以显示所有驱动器等,但它挂起。应用程序中的任何内容都不可点击,我必须在运行 exe 时停止在 IDE 或任务管理器 -> 结束任务中执行。
更奇怪的是,如果我首先打开 OpenFileDialog,然后选择三个 FolderBrowserDialogs 中的任何一个,它的行为就完全正确。
在这个应用程序中有一些后台线程的情况,但在添加之前,我遇到了这个问题。我什至通过确保它在 Sta Thread 上运行来实现 what was suggested,但没有运气。
现在终于是代码了:
Private Function GetSelectedFolder() As String
Dim returnValue As String = String.Empty
Using dialog As New FolderBrowserDialog()
Dim result As DialogResult = dialog.ShowDialog()
If result = DialogResult.OK Then
returnValue = dialog.SelectedPath
End If
End Using
Return returnValue
End Function
我对这个很困惑。任何帮助将不胜感激。谢谢!
【问题讨论】:
-
您等了多长时间才可能超时?我知道某些事情的超时时间(例如尝试打开 UNC 路径)可能会非常长。有时好像几分钟。当然,您始终可以尝试非编程方式来解决此问题 - 禁用驱动程序、Windows 启动时加载的程序、您的网络适配器等,然后查看问题是否消失。开发者机器往往有很多废话。
-
我点击了“这台电脑”,走了 15 分钟,没有走运。我将尝试禁用所有内容并运行并让您知道它是否有效。谢谢!