【问题标题】:Datagridview Exception: 'Reentrant Call' on DGV.ClearDatagridview 异常:DGV.Clear 上的“重入调用”
【发布时间】:2016-01-15 19:33:57
【问题描述】:

我明白了。 Datagridview cannot be in the process of changing ANYTHING。我不认为我是,但我仍然偶尔会遇到这个异常。这就是如此奇怪。超过 90% 以上的时间都可以正常工作。

我在 Windows 窗体上有一个选项卡控件,并且多个选项卡页具有数据网格视图控件。它们都没有绑定到数据库。当用户浏览标签页时,每个标签页的“进入”和“离开”事件都有代码。进入tabpage,如果有DGV控件,有一行代码清空所有行。

Private Sub Tab3_Plan_Enter(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Tab3_Plan.Enter

        dgPlan.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        CircuitItems = LoadCatalogItems(dgPlan, cbVDSvcLocation, iKind.PlanSku)
        ' More event code

Private Function LoadCatalogItems(ByRef DGV As DataGridView, _
                    ByVal cbControl As System.Windows.Forms.ComboBox, _
                    ByRef ItemKind As Integer) As Integer
        Dim DescDGName As String
        Dim OrigInternalDesc As String
        Dim DisplayDesc As String

        DGV.Rows.Clear()   ' <-- This is where the exception is thrown
        ' More function code

Tab3_Plan_Enter 事件处理程序中的 AutoSizeRowMode 是否与此有关?如果是这样,我该如何克服它?将 Tab3_Plan_Enter 中的两行代码重新排序是个好主意吗?

【问题讨论】:

    标签: .net vb.net exception datagridview reentrancy


    【解决方案1】:

    当您尝试对当前正在使用的单元格执行某些操作时会引发此异常。

    尝试在 DGV.Rows.Clear() 之后添加 Thread.Sleep(5000) 以给它一些时间来清除 DataGridView。既然你说它只是偶尔发生,可能是 DataGridView 的行太多,需要一段时间才能清除所有内容。由于之后您可能会添加更多行,因此这是一个可行的方案。

    如果可行,您可以减少睡眠时间,以便仅在需要时停止线程。

    【讨论】:

    • 我认为您的意思是在 DGV.Rows.Clear 之前。我正在试一试。我可能需要一段时间才能知道这是否能解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2012-12-01
    • 2016-07-09
    相关资源
    最近更新 更多