0

こんにちは、スレッドを実行し、その過程で UI を更新するプログラムがあります。安全なスレッド化のために .invokerequired を使用しましたが、すべて正常に動作しています。スレッドの1つでは、別のスレッドで作成されたリストボックス内のアイテムの値を使用する必要があり、(ListBox2.Items(index))現在それを行っていdim item1 as integer =ListBox2.Items(index)ます. 現在、プログラムは正常に実行されており、例外やエラー メッセージは表示されていませんが、同じ行のウォッチを追加すると、次のメッセージが表示されます作成されたスレッドよりも."} System.InvalidOperationException.

それは正常ですか?別のスレッドにあるリストボックス内のアイテムの値を安全に取得する方法はありますか?

4

1 に答える 1

0

クロススレッド例外についての質問に答えるには、これは正常であり、作成されたスレッドとは異なるスレッドから ui 要素にアクセスすることは許可されていません。これを修正するには、control.invoke() を使用してラムダ式を実行し、リストボックスを作成したスレッドでアクセス コードを実行する必要があります。

Dim item1 as Integer
If ListBox2.InvokeRequired then
    Listbox2.Invoke(Sub() Item1 = ListBox2.Items(Index))
Else
    Item1 = ListBox2.Items(Index)
End If
于 2013-05-05T12:30:18.097 に答える