将行添加到DataGridView控件会导致崩溃,但仅在第二次尝试时才会崩溃

时间:2019-04-02 17:42:28

标签: vb.net multithreading datagridview

我有一个DataGridView(dgvNew),该文件由FileSystemWatcher所在的JSON文件填充,读取后逐行添加数据。它在第一个文件上工作正常。但是,如果我通过复制和粘贴相同的JSON文件来触发新文件,则会按照id的预期逐行添加行,但是整个表单会崩溃而不会出现错误。

我已经尝试过使用WHILE循环的TRY..CATCH来打开文件,这些文件在打开它们和添加行方面起作用,我只是不明白为什么它会崩溃。即使表单被冻结,代码也将继续执行。与线程相关吗?

    Public Sub subParseJSONs(strFilePath As String, strDesiredField As String)

        Dim json As String
        Dim strMachine As String
        Dim read As New Newtonsoft.Json.Linq.JObject
        Dim booErrorJSNOArrRead As Boolean
        Dim i As Integer
        Dim dgvIndex As Integer
        Dim booOpened As Boolean
        Dim k As Integer, j As Integer

        booOpened = False
        k = 1
        j = 1
        json = Nothing



        While json Is Nothing
            Try
                j = j + 1
                If j = 10 Then
                    MessageBox.Show("J integer reached 10")
                    Exit While
                    Exit Try
                End If
                json = Replace(Replace(System.IO.File.ReadAllText(strFilePath), vbLf, ""), vbTab, "")
                read = Newtonsoft.Json.Linq.JObject.Parse(json)

            Catch ex As IOException
                'MessageBox.Show(ex.Message)
                Threading.Thread.Sleep(300)
                'GoTo EndOfSUb
            Catch ex As Exception
                'MessageBox.Show(ex.Message)
                Threading.Thread.Sleep(300)
                'GoTo EndOfSUb
            Finally
                booOpened = True

            End Try


        End While




        booErrorJSNOArrRead = False
        i = 0


        dgvNew.ColumnCount = 6
        dgvNew.Columns(0).Name = "TempID"
        dgvNew.Columns(1).Name = "DriverName"
        dgvNew.Columns(2).Name = "Seat"
        dgvNew.Columns(3).Name = "RaceTime"
        dgvNew.Columns(4).Name = "ResultTime"
        dgvNew.Columns(5).Name = "CarDriven"


        dgvNew.RefreshEdit()
        dgvNew.Refresh()

        Do Until i = read.Item("Result").Count

            If Not read.Item("Result")(i)("DriverName") = "" Then
                Dim milliseconds As Double = Convert.ToDouble(read.Item("Result")(i)("TotalTime"))
                Dim ts As TimeSpan = TimeSpan.FromMilliseconds(milliseconds)

                Dim strMMSSmmm As String = ts.Minutes.ToString & ":" & ts.Seconds.ToString & "." & ts.Milliseconds.ToString

                Dim row As String() = New String() {i + 1,
                                                read.Item("Result")(i)("DriverName"),
                                                read.Item("Result")(i)("DriverName"),
                                                strMMSSmmm,
                                                DateTime.Now, read.Item("Result")(i)("CarModel")}
                dgvNew.Rows.Add(row)

            End If

            i = i + 1

        Loop

        read = Nothing

    End Sub

我希望将新行添加到dgvNew的底部,但它们会崩溃?

0 个答案:

没有答案