我目前正在为我的公司开展一个小型自动更新项目。在对多线程进行一些研究之后,我设法构建了以下代码:
主题#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
我坚持了两件事:
控制在另一个线程
请帮我修复此错误。
非常感谢。
答案 0 :(得分:0)
每次访问UI元素时都需要调用。调用Me.Close()
开始处理所有表单元素(组件,按钮,标签,文本框等),导致与表单本身以及其中的所有内容进行交互。
您不需要调用的唯一内容是属性,您知道在获取或设置时不会修改UI上的任何内容,还有字段 (又名变量)。
例如,不需要调用它:
Dim x As Integer = 3
Private Sub Thread1()
x += 8
End Sub
要解决您的问题,您只需要调用表单的结束。这可以使用委托来完成。
Delegate Sub CloseDelegate()
Private Sub Thread1()
If Me.InvokeRequired = True Then 'Always check this property, if invocation is not required there's no meaning doing so.
Me.Invoke(New CloseDelegate(AddressOf Me.Close))
Else
Me.Close() 'If invocation is not required.
End If
End Sub