1

我创建了一个使用 .NET 3.5 编译的应用程序。并使用了 FolderBrowserDialog 对象。当按下按钮时,我执行以下代码:

FolderBrowserDialog fbd = new FolderBrowserDialog ();
fbd.ShowDialog();

显示文件夹对话框,但我看不到任何文件夹。我唯一看到的是按钮确定和取消(当 ShowNewFolderButton 属性设置为 true 时创建新文件夹按钮)。当我在不同的表单上尝试完全相同的代码时,一切正常。

有任何想法吗??

4

1 回答 1

1

检查运行对话框的线程是否在 STAThread 上。因此,例如确保您的 Main 方法标有 [STAThread] 属性:

[STAThread]
static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

否则,您可以执行此操作(来自FolderBrowserDialog Class上的社区内容)。

/// <summary>
/// Gets the folder in Sta Thread
/// </summary>
/// <returns>The path to the selected folder or (if nothing selected) the empty value</returns>
private static string ChooseFolderHelper()
{
    var result = new StringBuilder();
    var thread = new Thread(obj =>
    {
        var builder = (StringBuilder)obj;
        using (var dialog = new FolderBrowserDialog())
        {
            dialog.Description = "Specify the directory";
            dialog.RootFolder = Environment.SpecialFolder.MyComputer;
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                builder.Append(dialog.SelectedPath);
            }
         }
     });

     thread.SetApartmentState(ApartmentState.STA);
     thread.Start(result);

     while (thread.IsAlive)
     {
         Thread.Sleep(100);
      }

    return result.ToString();
}
于 2010-04-20T05:09:08.850 回答