Я понимаю, что .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
У меня вопрос, почему это не встроено в фреймворк - конечно, если я пытаюсь обновить DataGridView
, он должен быть достаточно умным, чтобы знать, когда обновление происходит из другого потока, и он может делать все вышеперечисленное сам?