如今手上有一些歷史的VB項目,是工控方面PLC控制的. 代碼用了不少DoEvent 和時間等待. DoEvent的最大問題的不知道流程跳到哪裏去了.多線程
MSComm1.InBufferCount = 0 MSComm1.Output = nSendTemp DoEvents Start = timeGetTime Do While timeGetTime - Start < 500 '在毫秒內連續讀PLC '16是返回位的長度,要等它返回完以後,才能繼續下一步 If MSComm1.InBufferCount >= 16 Then Dim readTemp() As Byte readTemp = MSComm1.Input Dim nTemp(20) As Long If DispatchPlcData_Wr(readTemp, nTemp, 2) = False Then '讀PLC錯 nData(0) = 0 nData(1) = 0 GoTo EndFunc Else nData(0) = nTemp(0) nData(1) = nTemp(1) GetAddressData = True Exit Function End If End If DoEvents Loop
因此,不得以要用C#從新改造,從新撿起多線程.以前寫WinForm比較少,從新學習一遍多線程.異步
1. IO密集型的,儘可能不要用多線程,而是用異步方法.由於IO比CPU慢太多了.CPU只須要偶爾發個指令過去,而後在異步方法完成時處理一下就行了.oop