miraclelife 发表于 2011-8-3 11:55:55

用过C#写串口程序的请进!

我目前正在用C#写一个wince下面的程序,具体功能就是收到一些数据,解释后再发送相应的数据,现在用到了5个窗体,代码一点点的写,结果到了form2的时候出问题了,因为form2不能调用form1中的串口控件,form1中的串口控件需要一直打开,有数据需要发送的时候就发数据,没有数据发送就监听。现在哪位筒子知道怎样让多个窗体共用一个串口控件?

miraclelife 发表于 2011-8-3 12:44:21

呼叫大侠

yajira 发表于 2011-8-3 12:47:07

还是可以访问的

只要将form1的 对象告诉 form2 就可以了...

miraclelife 发表于 2011-8-3 13:16:38

可否具体点?

snoopyzz 发表于 2011-8-3 14:18:41

LZ,改成public就可以被其它类访问了,这是明显的事。。。

miraclelife 发表于 2011-8-3 14:25:53

我已经改成public了,关键问题是,我还调用form1中的一个senddata函数,用来发数据,现在一发数据就提示串口是关闭状态,open一下就说端口不存在,因为都是使用一个com口的,怎么办?

yajira 发表于 2011-8-3 20:42:01

发送啊,接收啊,打开一次就够了,不要关掉串口。保持引用。

winfisher 发表于 2011-8-3 21:42:51

1.把串口类封装成static
2.要注意加锁,避免通信冲突
3.你把你程序的流程画出来,会比较好解决

vivalite 发表于 2011-8-3 22:18:20

我一般用一个专门的线程来处理串口通讯(串口控件放进组件中)、另一个线程处理数据,主UI线程只负责窗口显示,这样速度快(尤其在多核处理器上),界面没延迟。

跟着这篇文章做一遍就明白了
http://msdn.microsoft.com/en-us/library/48cfdff6%28v=VS.90%29.aspx

多线程通讯示例:
点击此处下载 ourdev_663996ARKSRB.rar(文件大小:48K) (原文件名:multithread.rar)

lxlylm 发表于 2011-8-12 11:19:32

sendmessage 或用 委托

skystalker 发表于 2011-8-12 11:22:48

还没用到多线程 MARK一下

vivalite 发表于 2011-8-12 21:37:07

Program.cs里添加static的Send Command Queue和Receive Command Queue
把SerialPort封装进Component,Component在Main里启动,启动后台发送线程循环检查Send Command Queue是否有数据,有的话就发。SerialPort的Receive事件对接收到的数据做简单处理然后直接Enqueue进Receive Command Queue。
在UI线程里启动一个主线程循环处理Receive Command Queue接收到的数据;主线程和窗口UI的通讯使用Event和control.invoke来进行。

这样做的好处是一个线程不工作或等待数据时可以把CPU时间让给另一个线程,UI更新和数据处理感觉上几乎同时发生(如果你用双核处理器就是同时发生),用户界面流畅,提高产品形象。

fanwt 发表于 2011-8-12 22:18:47

mark~~

myhonour 发表于 2011-8-13 09:34:04

mark
页: [1]
查看完整版本: 用过C#写串口程序的请进!