Почему мой вызов добавляет 10 секунд ко времени загрузки сетки? - PullRequest
2 голосов
/ 05 августа 2020

Я попытался добавить вызывающий метод, чтобы мой журнал ошибок не рассылался спамом «Границы не могут быть изменены, пока заблокированы».

Это решило мою проблему, однако ... Он добавил дополнительный 10 секунд до загрузки моего RadGridView.

Я посмотрел на https://www.telerik.com/forums/bounds-cannot-be-changed-while-locked, чтобы настроить вызывающий, но я не вижу ничего другого, что могло бы помочь с моей проблемой.

Я приложил образец своего кода ниже, любая помощь будет принята с благодарностью.

Private Sub bgw_initialLoad_DoWork(sender As Object, e As DoWorkEventArgs)
        Try
            liveDS = New DataSet
            Dim dsholder As DataSet = GetDataFromSQL("LoadData")

            Dim dt1 As DataTable = dsholder.Tables(0)
            Dim dt_1 As DataTable = dt1.Copy()
            dt_1.TableName = "Customer"
            liveDS.Tables.Add(dt_1)

            Dim dt2 As DataTable = dsholder.Tables(1)
            Dim dt_2 As DataTable = dt2.Copy()
            dt_2.TableName = "Orders"
            liveDS.Tables.Add(dt_2)

            Dim dt3 As DataTable = dsholder.Tables(2)
            Dim dt_3 As DataTable = dt3.Copy()
            dt_3.TableName = "OrderLine"
            liveDS.Tables.Add(dt_3)

            If RadGridView.InvokeRequired Then
                RadGridView.Invoke(New MethodInvoker(AddressOf SetupDataSources))
            Else
                SetupDataSources()
            End If
        Catch ex As Exception
            sendCaughtError(ex)
        End Try
    End Sub

    Private Sub SetupDataSources()
        If liveDS.Tables.Count > 1 Then
            RadGridView.DataSource = liveDS.Tables("Customer")
            liveOrdersTemplate.DataSource = liveDS.Tables("Orders")
            liveOrdersTemplate2.DataSource = liveDS.Tables("OrderLine")
        End If
    End Sub

    Private Sub bgw_initialLoad_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
            Try
                RadGridView.DataSource = liveDS.Tables("Customer")
    
                Dim template As New GridViewTemplate()
                template.DataSource = liveDS.Tables("Orders")
                RadGridView.MasterTemplate.Templates.Add(template)
    
                Dim template2 As New GridViewTemplate()
                template2.DataSource = liveDS.Tables("OrderLine")
                RadGridView.Templates(0).Templates.Add(template2)
    
                Dim relation As New GridViewRelation(RadGridView.MasterTemplate)
                relation.ChildTemplate = template
                relation.ParentColumnNames.Add("Invoice Customer")
                relation.ChildColumnNames.Add("InvoiceCode")
                RadGridView.Relations.Add(relation)
    
                Dim relation2 As New GridViewRelation(RadGridView.Templates(0))
                relation2.ChildTemplate = template2
                relation2.ParentColumnNames.Add("OrderNo")
                relation2.ChildColumnNames.Add("OrderNo")
                RadGridView.Relations.Add(relation2)
    
                FormatGrid()
                SplitContainer2.Panel1.Enabled = True
                SplitContainer1.Panel2.Enabled = True
                refreshMainGrid()
                HideLoadingGif()
            Catch ex As Exception
                sendCaughtError(ex)
            End Try
        End Sub

1 Ответ

3 голосов
/ 05 августа 2020

Отладка потоков может быть сложной, поверьте мне. Это не «настоящий» ответ, это набор советов, которые могут помочь - я надеюсь, что это произойдет.

В меню отладки есть выделенные windows, которые могут помочь. Я начал с этой веб-страницы , когда мне было интересно, что происходит с моим приложением и почему не было очевидно, почему это происходит.

Кроме того, пока ваш параллельный поток работает, он может "silent cra sh", если ваша IDE не настроена на паузу при каждом cra sh, и в этом случае она не будет возвращать значение, а просто будет молчать. Убедитесь, что установлены хотя бы следующие параметры:

Break on crash

Parallel stacks order

And don't forget to show this window while debugging: (previous image showed Threads and Call stack instead, while they are good to have around while debugging it's the parallel stacks which I was going for)

Параллельные стеки

И последнее: такая большая задержка может быть связана с базой данных. Я не говорю, что это так, но вы должны знать о возможности. 1026 * в SetupDataSources(), таким образом, где бы он ни был вызван, вы будете потокобезопасными. Вот так:

Private Sub SetupDataSources()
    If RadGridView.InvokeRequired Then
        RadGridView.Invoke(Sub() SetupDataSources())
    End If

    If liveDS.Tables.Count > 1 Then
        RadGridView.DataSource = liveDS.Tables("Customer")
        liveOrdersTemplate.DataSource = liveDS.Tables("Orders")
        liveOrdersTemplate2.DataSource = liveDS.Tables("OrderLine")
    End If
End Sub

Удачи ... вам может понадобиться;)

...