The problem: On a windows form there is a FolderBrowserDialog added. There is a button to use the FolderBrowserDialog.
Wen you click the button the FolderBrowserDialog is used. All word fine. Until it is deployed, then the dialog screen comes up with no tree to browse or select a folder.
On msdn i found some hints likeFolderBrowserDialog Class and Problem using FolderBrowser control in Setup project. This last one “solve” the problem.
But there was one think more to understand, how to pass the value to the new thread and getting it back from the thread.
This is how i did it.
Private _Directory As String = String.Empty Private Sub cmdBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles cmdBrowse.Click Dim thdThread As Threading.Thread = New Threading.Thread( New Threading.ParameterizedThreadStart(AddressOf dlgFolder)) Dim StartPath As String = txtValue.Text 'Open the FolderBrowerDialog in a other (static) thread. 'This is done to prevent a empty (no tree) popup thdThread.SetApartmentState(Threading.ApartmentState.STA) thdThread.Start(StartPath) thdThread.Join() 'Store result from other thread txtValue.Text = _Directory End Sub '''
''' Use folderBrowserDialog '''''' ''' ''' Last update: EH 2012-02-11 ''' To prevent problemens the advies to use STAThread is followed. ''' Do NOT use ByVal or ByRef, then you will get errors ''' _ Public Sub dlgFolder(obj As Object) Dim strDirectory As String = CType(obj, String) Dim StartPath As String, strResult As String With FolderBrowserDialog ' Use Desktop gives acces to the network .RootFolder = Environment.SpecialFolder.Desktop If strDirectory = "" Then .SelectedPath = "" Else .SelectedPath = IO.Path.GetDirectoryName(strDirectory) End If StartPath = .SelectedPath strResult = StartPath If .ShowDialog = Windows.Forms.DialogResult.OK Then 'Store result If StartPath <> .SelectedPath Then strResult = .SelectedPath End If If Not strResult.EndsWith(IO.Path.DirectorySeparatorChar) Then 'Add missing char strResult &= IO.Path.DirectorySeparatorChar End If 'Return the path to use _Directory = strResult End With End Sub