0

我正在使用 DevExpress XtraGrid 控件。

我有一个例程通过并动态添加当前表单上的所有控件,并在单独的线程上启动给定控件的例程以将其初始化为将显示给最终用户的值。一些控件正在显示计算值,并且需要一些时间来返回它们的值,所以这就是我们在单独的线程上执行它的原因。

除了在特定情况下的 DevExpress XtraGrid 控件外,一切都按预期工作。

    Private Delegate Sub SetGridDataSourceDelegate(ByVal Data As List(Of myItem))

    Private Sub SetGridDataSource(ByVal Data As List(Of myItem))
        If Not IsNothing(myItemGrid) Then
            If myItemGrid.InvokeRequired Then
                Dim d As New SetGridDataSourceDelegate(AddressOf SetGridDataSource)
                myItemGrid.Invoke(d, New Object() {Data})
            Else
                myItemGrid.DataSource = Data
            End If
        End If
    End Sub

我正在为任何必须更新的控件属性使用类似的代码片段,并且一切正常。在上面的代码中,当调用实际的 Invoke 时,似乎线程刚刚结束并且从不调用委托,并且也没有返回完成。

有人对可能导致这种奇怪行为的原因有任何想法吗?

4

2 回答 2

1

嗯……“还有”什么?

改变这个:

If myItemGrid.InvokeRequired And Then

至:

If myItemGrid.InvokeRequired Then
于 2009-10-01T21:49:48.470 回答
0

您是否尝试过使用匿名委托?看看这篇文章,它对我很有用。

于 2011-09-09T18:44:35.233 回答