在多线程中你需要定义委托来修改控件属性
创新互联公司是一家专业提供岷县企业网站建设,专注与网站设计、成都网站建设、H5高端网站建设、小程序制作等业务。10年已为岷县众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
比如你修改Textbox属性,则:
Delegate Sub dl_ShowTextbox(ByVal iStr As String)
Public Sub ShowTextbox(ByVal iStr As String)
If Textbox.IsDisposed Then
Return
End If
If Textbox.InvokeRequired = True Then
Dim pInvoke As New dl_ShowTextbox(AddressOf ShowTextbox)
Me.Invoke(pInvoke, New Object() {iStr})
Else
Textbox.Text = iStr
End If
End Sub
在多线程中调用
ShowTextbox( "要显示的内容" )
你真心无聊。
多线程就是这样的。界面线程是主线程,你这个Form_Load就是运行在主线程上的线程,而Thread1,Thread2是由主线程启动的。这个启动不是线性的。
主线程只是通知系统,请启动一个线程运行某某函数。
而哪个线程先运行完全在系统决定。甚至可能主线程执行到Thread1.Abort() ,Thread2.Abort()的时候这两个线程都还没有启动起来,所以你会遇到两个变量都是空值这种情况。
多线程是用于处理复杂项目的
打个比方
你的主程序线程A中有个循环,由于代码是一行行走的,所以循环结束前下面的代码无法运行,而此时主界面的反应就类似卡死的样子,你点击按钮也没有反应,因为主线程在忙着循环呢,所以对按钮的事件代码要等待了,如果要避免这种情况,就要用到多线程,另开一个新线程专门用来执行循环代码,主界面就不会卡死了,只要在循环结束后将结果传回主线程调用就可以了,再复杂点要涉及到委托,控制了
按你的要求其实你的代码用不到多线程,只要把sleep放到两段代码中间就可以了。
新线程结束用thread.abort()
你可以在timer前用if判断网络状态,
如断开,可用
threading.Thread.Sleep(10000) ‘当前线程挂起10秒
’可以开一个新线程去读取脱机数据。
如连接,则继续执行。
补充:
dim i as integer
'超过100次退出,避免死循环
for i=0 to 100
try
'ping你的端口
if ‘ok
exit for
else
threading.Thread.Sleep(10000) ‘当前线程挂起10秒
end
Catch ex As Exception
End Try
next