2010-04-20 3 views
1

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

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

Отображается диалоговое окно папки, но я не вижу никаких папок. Единственное, что я вижу , - это кнопки OK & Отменить (и создать новую кнопку папки, если для свойства 0NNFF. Когда я пробую тот же самый код в другой форме, все работает нормально.

Любые идеи?

ответ

1

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

Очень полезно. Спасибо! – chessofnerd

Смежные вопросы