Диалог просмотра папок не показывает папки - PullRequest
1 голос
/ 20 апреля 2010

Я создал приложение, скомпилированное с помощью .NET 3.5. и использовал FolderBrowserDialog объект. Когда кнопка нажата, я выполняю этот код:

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

Отображается диалог папок, но я не вижу никаких папок. Единственное, что я вижу кнопки OK и Отмена (и кнопка создания новой папки, когда Для свойства ShowNewFolderButton установлено значение true). Когда я пытаюсь точно такой же код в другой форме все работает нормально.

Есть идеи ??

1 Ответ

1 голос
/ 20 апреля 2010

Убедитесь, что поток, в котором запущен ваш диалог, находится в 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();
}
...