用time控件啊,獲取threadstate后,按指定時(shí)間間隔規(guī)定向界面刷新,線程必須是全局變量
創(chuàng)新互聯(lián)建站-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比定結(jié)網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式定結(jié)網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋定結(jié)地區(qū)。費(fèi)用合理售后完善,十載實(shí)體公司更值得信賴(lài)。
用一個(gè)有退出條件的無(wú)限循環(huán)的sub也行。
線程開(kāi)始就觸發(fā)該過(guò)程,用無(wú)限循環(huán)來(lái)刷新?tīng)顟B(tài),線程完成即退出無(wú)限循環(huán)。局部變量的線程也可以用這種方式。
不過(guò)用法要正確,否則會(huì)出問(wèn)題。
我處理這個(gè)問(wèn)題的大概過(guò)程,當(dāng)程序響應(yīng)DataReceived時(shí):
Private?Sub?MyCOMM_DataReceived(ByVal?sender?As?Object,?ByVal?e?As?
System.IO.Ports.SerialDataReceivedEventArgs)?Handles?MyCOMM.DataReceived
If?IsClosing?Then?Exit?Sub?'如果界面正在關(guān)閉串口則退出過(guò)程
Try
IsListenning?=?True'設(shè)置正在讀取標(biāo)記,供界面操作判斷
Wait(150)'等待150毫秒
Dim?n?As?Long?=?MyCOMM.BytesToRead
Dim?buf(n?-?1)?As?Byte
Try
MyCOMM.Read(buf,?0,?n)
Catch?ex?As?Exception
MsgBox("接收短信出錯(cuò)",?"COMPort.DataReceived")
Throw?New?System.Exception(ex.Message)
Finally
IsListenning?=?False'無(wú)論接收數(shù)據(jù)成功與否,都關(guān)閉正在讀取標(biāo)記
End?Try
MyCOMM.Close()
MyCOMM.Open()
'Do?SomeThing
Catch?ex?As?Exception
MyCOMM.Close()
MyCOMM.Open()
End?Try
End?Sub
Protected?Sub?Wait(ByVal?miliseconds?As?Integer)
Dim?tmpNow?As?Date?=?Now
While?Now.Subtract(tmpNow).Milliseconds??miliseconds
Application.DoEvents()
End?While
End?Sub
希望能幫的上忙
你可以在timer前用if判斷網(wǎng)絡(luò)狀態(tài),
如斷開(kāi),可用
threading.Thread.Sleep(10000) ‘當(dāng)前線程掛起10秒
’可以開(kāi)一個(gè)新線程去讀取脫機(jī)數(shù)據(jù)。
如連接,則繼續(xù)執(zhí)行。
補(bǔ)充:
dim i as integer
'超過(guò)100次退出,避免死循環(huán)
for i=0 to 100
try
'ping你的端口
if ‘ok
exit for
else
threading.Thread.Sleep(10000) ‘當(dāng)前線程掛起10秒
end
Catch ex As Exception
End Try
next
用
t.Suspend() 這個(gè)是掛起線程。是一個(gè)異步方法。
t.Sleep 我看了是一個(gè)同步方法。要等這個(gè)方法運(yùn)行完了才繼續(xù)下一步。
這和from.show和 from.showdiaglog區(qū)別差不多!
至于疑問(wèn)2我也沒(méi)找到原因。