i have a drag drop panel that gets file info and updates a databound DGV my question is as i need to run another operation in the same thread is how would i place that into a background worker
this is the code
So far ive tried
drag drop event
Backgroundworker do work event
work complete event
now that fails due to Cross-thread operation not valid: Control 'ItemnameTextBox' accessed from a thread other than the thread it was created on.
so obviously its becouse im not updateing the textbox text the correct way but how do i do that and what else have i done wrong
this is the code
Code:
Loader_box.Visible = True
Start_DGV_Loader_tick.Enabled = True
'Editingrunning =
''Bckgroundwroker
theFiles = CType(e.Data.GetData("FileDrop", True), String())
For Each theFile As String In theFiles
Application.DoEvents()
Me.ItemsdatabaseBindingSource.AddNew()
''Get File Type
Dim FileType As String = Path.GetExtension(theFile)
ItemtypeTextBox.Text = FileType
''Get File Name
Dim fileName As String = Path.GetFileNameWithoutExtension(theFile)
ItemnameTextBox.Text = fileName
''Get File Path
Dim FilePath As String = Path.GetFullPath(theFile)
Item_pathTextBox.Text = FilePath
ItemviewTextBox.Text = "View item"
''attach to profile
Item_profileTextBox.Text = Profile_NameTextBox.Text
'get file type image
Dim fileSize As Long
If TextFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_files
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf AudioFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_music
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf VideoFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_movies
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf VectorFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_vectors
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf CompressesFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_compressed
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf DeveloperFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_developers
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf MiscFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_unknown
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf imageFiles.Contains(FileType) Then
ItemtypeimagePictureBox.Image = My.Resources.types_pics
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf FileType = "" Then
Dim folderConvert As Long
folderConvert = FldrSize(FilePath)
ItemsizeTextBox.Text = FormatFileSize(folderConvert)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ItemtypeTextBox.Text = "Folder"
ItemtypeimagePictureBox.Image = My.Resources._types_folders
Else
ItemtypeimagePictureBox.Image = My.Resources.types_unknown
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
End If
Me.Validate()
Me.ProfilestableBindingSource.EndEdit()
Me.ItemsdatabaseBindingSource.EndEdit()
Me.TableAdapterManager1.UpdateAll(Me.ItemsdatabaseDataSet)
Me.BindingContext(Me.ItemsdatabaseDataGridView.DataSource).EndCurrentEdit()
Next
Start_DGV_Loader_tick.Enabled = False 'this will be in the backgroundworker compleate event
Loader_box.Visible = False 'this will be in the backgroundworker compleate eventSo far ive tried
drag drop event
Code:
Private Sub ItemsdatabaseDataGridView_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ItemsdatabaseDataGridView.DragDrop
Loader_box.Visible = True
Start_DGV_Loader_tick.Enabled = True
theFiles = CType(e.Data.GetData("FileDrop", True), String())
BackgroundWorker1.RunWorkerAsync(theFiles)
End SubBackgroundworker do work event
Code:
For Each theFile As String In theFiles
Me.ItemsdatabaseBindingSource.AddNew()
''Get File Type
Dim FileType As String = Path.GetExtension(theFile)
Me.ItemtypeTextBox.Text = FileType
''Get File Name
Dim fileName As String = Path.GetFileNameWithoutExtension(theFile)
Me.ItemnameTextBox.Text = fileName
''Get File Path
Dim FilePath As String = Path.GetFullPath(theFile)
Me.Item_pathTextBox.Text = FilePath
Me.ItemviewTextBox.Text = "View item"
''attach to profile
Me.Item_profileTextBox.Text = Profile_NameTextBox.Text
'get file type image
Dim fileSize As Long
If TextFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_files
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf AudioFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_music
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf VideoFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_movies
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf VectorFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_vectors
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf CompressesFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_compressed
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf DeveloperFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_developers
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf MiscFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_unknown
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf imageFiles.Contains(FileType) Then
Me.ItemtypeimagePictureBox.Image = My.Resources.types_pics
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
ElseIf FileType = "" Then
Dim folderConvert As Long
folderConvert = FldrSize(FilePath)
Me.ItemsizeTextBox.Text = FormatFileSize(folderConvert)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
Me.ItemtypeTextBox.Text = "Folder"
Me.ItemtypeimagePictureBox.Image = My.Resources._types_folders
Else
Me.ItemtypeimagePictureBox.Image = My.Resources.types_unknown
fileSize = My.Computer.FileSystem.GetFileInfo(theFile).Length
ItemsizeTextBox.Text = FormatFileSize(fileSize)
Me.ItemdeletePictureBox.Image = My.Resources.btn_remove_DGV
End If
Me.Validate()
Me.ProfilestableBindingSource.EndEdit()
Me.ItemsdatabaseBindingSource.EndEdit()
Me.TableAdapterManager1.UpdateAll(Me.ItemsdatabaseDataSet)
Me.BindingContext(Me.ItemsdatabaseDataGridView.DataSource).EndCurrentEdit()
Next
End Subwork complete event
Code:
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Start_DGV_Loader_tick.Enabled = False
Loader_box.Visible = False
End Subnow that fails due to Cross-thread operation not valid: Control 'ItemnameTextBox' accessed from a thread other than the thread it was created on.
so obviously its becouse im not updateing the textbox text the correct way but how do i do that and what else have i done wrong