Компонент диалогового окна браузера папок, не отображающий список папок в формах Windows

У меня есть библиотека С#, содержащая форму, в которой я использую компонент диалога браузера папок, чтобы получить путь к папке. Форма отображается во время установки моего приложения с помощью пользовательского установщика. При нажатии на кнопку обзора отображается диалоговое окно просмотра папок. Диалог открылся, но списка папок не было, отображается пустой диалог с кнопками OK и Cancel. Я использую следующий код:

FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
folderBrowserDialog.RootFolder = Environment.SpecialFolder.MyComputer;
if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
{
    txtDBPath.Text = folderBrowserDialog.SelectedPath; 
    btnSelectFile.Enabled = true;
}

Как я могу решить эту проблему. Благодарность


person user3065217    schedule 27.08.2014    source источник
comment
Пользовательский установщик, безусловно, проблематичен. Добавьте диагностику: if (System.Threading.Thread.CurrentThread.GetApartmentState() != System.Threading.ApartmentState.STA) MessageBox.Show(Оно будет пустым);   -  person Hans Passant    schedule 27.08.2014


Ответы (1)


Я решил эту проблему.

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Try
        Dim MyThread As New Threading.Thread(AddressOf ShowMyFolderBrowserDialog)
        MyThread.SetApartmentState(Threading.ApartmentState.STA)
        MyThread.Start()
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Setup")
    End Try
End Sub

Private Sub ShowMyFolderBrowserDialog()
    Try
        Me.FolderBrowserDialog1.RootFolder = Environment.SpecialFolder.MyComputer
        Me.FolderBrowserDialog1.Description = "Select folder"
        If System.IO.Directory.Exists(Me.TextBox1.Text) Then
            Me.FolderBrowserDialog1.SelectedPath = Me.TextBox1.Text
        End If
        If Me.FolderBrowserDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Me.TextBox1.Text = Me.FolderBrowserDialog1.SelectedPath
        End If
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Setup")
    End Try
End Sub
person DYMATEJlb    schedule 26.03.2015