我正在使用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时,它表示线程刚刚结束并且从不调用委托,并且也没有返回完成。
有人对可能导致这种奇怪行为的行为有任何想法吗?
答案 0 :(得分:1)
嗯...“和”什么?
改变这个:
If myItemGrid.InvokeRequired And Then
为:
If myItemGrid.InvokeRequired Then
答案 1 :(得分:0)
您是否尝试过使用匿名代表?看看这个article它对我来说很有用。