【发布时间】:2016-03-15 00:44:13
【问题描述】:
我目前正在为我的公司开发一个小型自动更新项目。经过对多线程的一些研究,我设法构建了以下代码:
主题 #01:
Private Sub startUpdate()
If InvokeRequired Then
Invoke(New FTPDelegate(AddressOf startUpdate))
Else
'some code here
End If
End Sub
线程 #02 由线程 #01 连接:
Private Sub startProcess()
myThread = New Thread(Sub() startUpdate())
myThread.Start()
myThread.Join()
'another code goes here
Me.close
End Sub
当表单加载时访问线程#02:
Private Sub SUpdater_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myThread1 = New Thread(Sub() startProcess())
myThread1.Start()
End Sub
有两件事我被困住了:
- 我无法从线程 #01 访问 Me.close。它会引发错误:
控件在另一个线程中
- 即使我调用了另一个线程,主窗体也会冻结。
请帮我解决这个错误。
非常感谢。
【问题讨论】:
-
您必须调用
Me.Close()调用,就像您在此处所做的那样:Invoke(New FTPDelegate(AddressOf startUpdate))。 -
@VisualVincent 我应该在哪里调用 Me.close?我是否应该将其设为一个单独的函数并像调用 startUpdate 函数一样调用它?
-
我已经添加了一个更彻底的解释答案。
-
可能想要使用Task 而不是普通的
Thread
标签: vb.net multithreading