2013-10-25 34 views
1

我有一個windows窗體,有一個button和一個datagridview。當我選擇button時,會啓動一個線程來執行某些操作並最終填充我的datagridview。問題是datagridview未填充。Thread to update DataGridView

我在做什麼錯?

我的代碼:

Private MyCreateStructureFromSampleXMLTread As Thread 

Private Sub ButtonCreateStructureFromSampleXML_Click(sender As Object, e As EventArgs) Handles ButtonCreateStructureFromSampleXML.Click 
    Me.Cursor = Cursors.WaitCursor 
    MyCreateStructureFromSampleXMLTread = New Thread(AddressOf ModuleXML_MESSAGE_STRUCTURE.CreateStructureFromSampleXML) 
    MyCreateStructureFromSampleXMLTread.IsBackground = True 
    MyCreateStructureFromSampleXMLTread.SetApartmentState(ApartmentState.STA) 
    MyCreateStructureFromSampleXMLTread.Start() 
    Me.Cursor = Cursors.Default 
End Sub 

線程:

Friend Sub CreateStructureFromSampleXML() 
    FormUTool.Cursor = Cursors.WaitCursor 
    Try 
     If ModuleFileHandling.OpenFile(Application.StartupPath, "Select XML File", ".xml", "XML File (*.xml)|*.xml") = True Then 
      ParseXMLFile(PublicUToolVariable.MyOpenedFile) 
     End If 
    Catch ex As Exception 
     MsgBox(ex.Message, MsgBoxStyle.Critical) 
    End Try 
    ModuleXML_MESSAGE_STRUCTURE.AlignElementPaths(PublicUToolVariable.MyAccessConnection) 
    ModuleXML_MESSAGE_STRUCTURE.XML_MESSAGE_STRUCTUREFillDataGridView(PublicUToolVariable.MyAccessConnection) 
    FormUTool.Cursor = Cursors.Default 
End Sub 
+1

你是否在該方法周圍放了一個try catch塊?最有可能的是,你正在得到一個異常,其中線程試圖訪問一個UI組件 – Ric

回答

1

您正試圖填補從非UI線程的線程上的DataGridView。這就是你做錯了什麼。 UI元素具有線程相關性要求,要求只能從創建它們的線程訪問它們。

更改您的策略,以便在工作線程中加載和解析XML,然後將該數據發送到UI線程並讓UI線程填充DataGridView。這是標準方法。您可以使用BackgroundWorker類。 DoWork事件處理程序將在工作線程上執行,並且RunWorkerCompleted事件處理程序將在UI線程上運行,以便爲您處理所有編組。

+0

Brian,感謝上百萬的指針。在你的幫助下,我設法在這裏找到一個很好的例子: