これがコードサンプルです。私が抱えている問題を再現するには、フォームにListBox
呼び出しを配置する必要があります。list_of_items
Imports System.Threading.Tasks
Public Class Form1
Dim _dt As DataTable
Private Sub Form1_Load() Handles MyBase.Load
_dt = New DataTable
With _dt.Columns
.Add("key")
.Add("value")
End With
With list_of_items
.ValueMember = "key"
.DisplayMember = "value"
.DataSource = _dt
End With
Dim addItemsTask As New Task(AddressOf AddThreeItems)
addItemsTask.Start() 'does not add anything when done
'AddThreeItems() #doing this instead works!
End Sub
Private Sub AddThreeItems()
Threading.Thread.Sleep(2000)
With _dt.Rows
.Add({"1", "One"})
.Add({"2", "Two"})
.Add({"3", "Three"})
End With
Me.Invoke(Sub() Me.Text = "Separate thread is done")
End Sub
End Class
問題は、行が物理的に追加されるため、DataTable.Rows.Count
増加しますが、視覚的には何も起こりません。に電話してRefresh
、リセットDataSource
しNothing
て元に戻そうとしましたが、役に立ちません。これをシングル スレッド処理に切り替えると、図に示した方法で行が問題なく追加されます。問題は何ですか?