0
我有一个需要处理的项目列表框,我想在一个单独的线程上异步处理它们。 (之前从未这样做过)。与VB.NET中的GUI控件异步工作
因此,我创建了一个委托,一个回调,调用列表框项目上的工作的方法。
我得到一个异常“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
你可以更具体地说明你的意思是“处理”吗?用户是否从列表框中添加和删除项目?是否应该在“处理”发生时允许这样做?是否需要让“处理”知道列表框数据的变化,还是只需要处理数据快照? –
当你说你有一个项目列表框时,我假设你想要列表(例如产品编号列表),并在背景中做某些事情是的?如果这样看看BackgroundWorker进程。这是初学者想要做异步工作的最佳方式http://bit.ly/320a66 –
他们需要使用选定的项目,不添加或删除 - 但他们需要完全访问选定的项目(如文件路径)(和该列表倾向于刷新或使用不属于我的线程的项目) – Thalia