我處理這個(gè)問題的大概過程,當(dāng)程序響應(yīng)DataReceived時(shí):
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),東洲企業(yè)網(wǎng)站建設(shè),東洲品牌網(wǎng)站建設(shè),網(wǎng)站定制,東洲網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,東洲網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
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)閉串口則退出過程
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'無論接收數(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),
如斷開,可用
threading.Thread.Sleep(10000) ‘當(dāng)前線程掛起10秒
’可以開一個(gè)新線程去讀取脫機(jī)數(shù)據(jù)。
如連接,則繼續(xù)執(zhí)行。
補(bǔ)充:
dim i as integer
'超過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ū)別差不多!
至于疑問2我也沒找到原因。
用time控件啊,獲取threadstate后,按指定時(shí)間間隔規(guī)定向界面刷新,線程必須是全局變量
用一個(gè)有退出條件的無限循環(huán)的sub也行。
線程開始就觸發(fā)該過程,用無限循環(huán)來刷新狀態(tài),線程完成即退出無限循環(huán)。局部變量的線程也可以用這種方式。
不過用法要正確,否則會(huì)出問題。