主题 : 请问vb.net与wince串口连续通讯问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 49133
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2011-06-08
最后登录: 2011-10-20
楼主  发表于: 2011-07-13 10:39

 请问vb.net与wince串口连续通讯问题

我有如下程序
目的:连续从WINCE串口(2s/次)读取14个字节的数据,debug.write到即时窗口,并用同步委托的方式显示到界面的文本框内!
复制代码
  1. [color=#0000FF]Imports system
  2. Imports system.runtime.interopservices
  3. Public Class Form1
  4.     Dim SerReadData(13) As Byte'从单片机接受到的参数字节
  5.     Dim RedCount As Integer'从单片机读取到的字节数
  6.     Dim IntLuTiWenDu As Integer'温度
  7.     Dim RCount As Long = 0'读取单片机次数
  8.     Dim HF(0) As Byte'向单片机发送的命令字节
  9.     Delegate Sub dlmyfunction()
  10.     Private Sub myfunction()
  11.         IntLuTiWenDu = Val(SerReadData(1)) * 256 + Val(SerReadData(2)) '温度
  12.         Text1.Text = Text1.Text & "次数:" & RCount & "温度:" & Space(3) & IntLuTiWenDu & Chr(13)
  13.         RCount = RCount + 1
  14.     End Sub
  15.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  16.         Timer1.Enabled = True
  17.     End Sub
  18.     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
  19.         If Not MSC.IsOpen Then
  20.             MSC.Open()
  21.         End If
  22.         MSC.Write(HF, 0, 1)
  23.     End Sub
  24.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  25.         HF(0) = 68
  26.     End Sub
  27.     Private Sub MSC_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles MSC.DataReceived
  28.         System.Threading.Thread.Sleep(200)
  29.         RedCount = Me.MSC.BytesToRead
  30.         If RedCount >= 10 Then
  31.             ReDim SerReadData(RedCount - 1)
  32.             Me.MSC.Read(SerReadData, 0, RedCount)
  33.             Debug.Write("次数:" & RCount & Space(5) & "温度:" & SerReadData(1) & Space(5) & SerReadData(2) & Chr(13))
  34.             Me.BeginInvoke(New dlmyfunction(AddressOf myfunction))   '同步委托
  35.         Else
  36.             Debug.Write("收到字符数:" & RedCount & Chr(13))
  37.         End If
  38.     End Sub
  39. End Class
  40. [/color]

该程序,在winxp下运行没有问题,我测试连续300次读取都没有出问题
然后新建wince项目,同样代码复制到wince项目内,运行(与windwos项目内代码完全一样),只能得到一次数据,这次数据是在“Me.BeginInvoke(New dlmyfunction(AddressOf myfunction)) '同步委托”这句代码前的debug.write显示的,然后同步委托方式不执行,假死到哪里了。即使我把同步委托那句代码注释掉,只把从单片机读取的数据debug.write显示到即时窗口也不行,也是只显示1次(但不固定,有过显示2,3,4次的情况,再多就没有),然后就假死到哪里了。
级别: 新手上路
UID: 49133
精华: 0
发帖: 11
金钱: 55 两
威望: 11 点
贡献值: 0 点
综合积分: 22 分
注册时间: 2011-06-08
最后登录: 2011-10-20
1楼  发表于: 2011-07-13 16:24
没有人了解么??是不是因为我用的是模拟器运行的原因?