我正在尝试使用线程来使所有内容加载异步,而不是让UI锁定。但是现在我有一个问题,我的代码中没有一个错误但是我收到很多奇怪的错误消息我不知道如何解决,而且我找不到我在互联网上的情况。下面是所有错误的图片:
答案 0 :(得分:0)
我没有使用这种破解方法,而是使用了线程池。
'Threading the loading of mutliple parts of
System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf LoadMargins))
System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf LoadNonBooking))
当有可用的开放线程时,这将启动这些功能。如果没有可用的线程,它将一直排队直到线程打开。
当我开始使用它时,我遇到了一些其他问题,比如跨线程操作。 (我也在使用DevExpress软件包,但这可以帮助正常的visual basic软件包中使用的其他东西。)
因为不允许跨线程操作,所以我们必须解决这个问题。在这种情况下,我想设置我的GridControl(DevExpress项目)的源,但所有的UI东西都在MAIN线程上运行,而不是在我刚刚创建的线程上运行。因此,为了解决这个问题,我使用了这个:
Private Function LoadMargins()
Me.SetSource(InvoiceTable)
End Function
SetSource由以下内容组成:
Private Sub SetSource(ByVal table As DataTable)
If Me.GridControl11.InvokeRequired Then
Dim d As New SetSourceCallback(AddressOf SetSource)
Me.Invoke(d, New Object() {[table]})
Else
Me.GridControl11.DataSource = [table]
End If
End Sub
调用某些东西使MAIN线程上某些东西的属性可用于子线程。在顶部的某处,我们有一个Delegate子,它用于Callback并能够调用它然后设置数据源(某种小循环)。
Delegate Sub SetSourceCallback([table] As DataTable)
完成此操作后,我可以在使用子线程时在主线程中编辑某些内容。如果我遗漏了某些内容或者我不清楚某些事情,请告诉我