Quantcast
Channel: VBForums - Visual Basic .NET
Viewing all articles
Browse latest Browse all 27554

advanced background worker help

$
0
0
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


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 event







So 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 Sub



Backgroundworker 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 Sub


work 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 Sub



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

Viewing all articles
Browse latest Browse all 27554

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>