Mat*_*lko 5 .net c# vb.net delegates invoke
我知道.NET是多线程的,这是一件好事,但是当我有一个后台工作者时,我会不断遇到问题,例如在我的表单上更新一些控件,我必须这样做:
Private Sub SetRowCellBoolValueThreadSafe(ByVal row As Integer, ByVal col As Integer, ByVal value As Boolean)
If dgvDatabase.InvokeRequired Then
Dim d As New SetRowCellBoolValueCallback(AddressOf SetRowCellBoolValue)
Me.Invoke(d, New Object() {row, col, value})
Else
SetRowCellBoolValue(row, col, value)
End If
End Sub
Delegate Sub SetRowCellBoolValueCallback(ByVal row As Integer, ByVal col As Integer, ByVal value As Boolean)
Private Sub SetRowCellBoolValue(ByVal row As Integer, ByVal col As Integer, ByVal value As Boolean)
dgvDatabase.Rows(row).Cells(col).Value = value
End Sub
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么这没有内置到框架中 - 当然,如果我想要更新DataGridView它,它应该足够聪明,知道更新何时来自另一个线程并且它可以完成上述所有操作?
这意味着将UI控件上的每个操作都转换为委托,以防万一它需要被编组到一个不同的线程.那将是非常昂贵的.此外,它预先假定你总是想做同样的事情 - 使用Invoke而不是BeginInvoke例如.
我同意手动执行此操作有点痛苦,但是下一版本的C#和VB应该可以通过异步方法使生活变得更轻松.
(顺便说一句,我不认为你真的想ByRef用于所有这些参数......你有可能不清楚是什么ByRef意思吗?)
| 归档时间: |
|
| 查看次数: |
273 次 |
| 最近记录: |