我有如下程序
目的:连续从WINCE串口(2s/次)读取14个字节的数据,debug.write到即时窗口,并用同步委托的方式显示到界面的文本框内!
复制代码- [color=#0000FF]Imports system
- Imports system.runtime.interopservices
- Public Class Form1
- Dim SerReadData(13) As Byte'从单片机接受到的参数字节
- Dim RedCount As Integer'从单片机读取到的字节数
- Dim IntLuTiWenDu As Integer'温度
- Dim RCount As Long = 0'读取单片机次数
- Dim HF(0) As Byte'向单片机发送的命令字节
- Delegate Sub dlmyfunction()
- Private Sub myfunction()
- IntLuTiWenDu = Val(SerReadData(1)) * 256 + Val(SerReadData(2)) '温度
- Text1.Text = Text1.Text & "次数:" & RCount & "温度:" & Space(3) & IntLuTiWenDu & Chr(13)
- RCount = RCount + 1
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Timer1.Enabled = True
- End Sub
- Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
- If Not MSC.IsOpen Then
- MSC.Open()
- End If
- MSC.Write(HF, 0, 1)
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- HF(0) = 68
- End Sub
- Private Sub MSC_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles MSC.DataReceived
- System.Threading.Thread.Sleep(200)
- RedCount = Me.MSC.BytesToRead
- If RedCount >= 10 Then
- ReDim SerReadData(RedCount - 1)
- Me.MSC.Read(SerReadData, 0, RedCount)
- Debug.Write("次数:" & RCount & Space(5) & "温度:" & SerReadData(1) & Space(5) & SerReadData(2) & Chr(13))
- Me.BeginInvoke(New dlmyfunction(AddressOf myfunction)) '同步委托
- Else
- Debug.Write("收到字符数:" & RedCount & Chr(13))
- End If
- End Sub
- End Class
- [/color]
|
该程序,在winxp下运行没有问题,我测试连续300次读取都没有出问题
然后新建wince项目,同样代码复制到wince项目内,运行(与windwos项目内代码完全一样),只能得到一次数据,这次数据是在“Me.BeginInvoke(New dlmyfunction(AddressOf myfunction)) '同步委托”这句代码前的debug.write显示的,然后同步委托方式不执行,假死到哪里了。即使我把同步委托那句代码注释掉,只把从单片机读取的数据debug.write显示到即时窗口也不行,也是只显示1次(但不固定,有过显示2,3,4次的情况,再多就没有),然后就假死到哪里了。