我有一个需要处理的项目列表框,我想在单独的线程上异步处理它们。(以前从未这样做过)。
所以我创建了一个委托,一个回调,称为对列表框项目执行工作的方法。
我收到异常“System.InvalidOperationException”:跨线程操作无效:控件“ListBoxBlah”从创建它的线程以外的线程访问。
对单个项目执行异步操作对我来说没有意义,因为我这样做只是为了在后台执行大量操作(列表框可能有 20000 个项目),同时允许用户执行其他操作。
要与 GUI 交互,这必须变得更加复杂......我只是不知道如何:
Public Sub F(ByVal ext As String)
If ListBoxBlah.SelectedIndex = -1 Then Return
'Process ListBoxBlah
End Sub
Delegate Sub E(ByVal ext As String)
Sub Callback(ByVal ar As IAsyncResult)
Dim t As E = CType(CType(ar, System.Runtime.Remoting.Messaging.AsyncResult).AsyncDelegate, E)
t.EndInvoke(ar)
End Sub
Public Sub Ex()
Dim t As E = AddressOf F
t.BeginInvoke("ext", AddressOf Callback, "state")
End Sub