关于 C# SerialPort问题 请各路高手帮帮忙哈

dkling866 2010-08-03 04:13:07
private void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (sp.DsrHolding == false && serialPort1.CtsHolding == true)
{
Touch = true;
}
else
{
if (Touch)
{
Touch = false;
MessageBox.Show("ssssss");
}
}
}
SerialPort sp = new SerialPort();
private void Form2_Load(object sender, EventArgs e)
{
sp.Open();
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.ReceivedBytesThreshold = 1;
}

private void timer1_Tick(object sender, EventArgs e)
{
sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);

}怎么触发不了DataReceived事件。
...全文
158 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
highfly2008 2011-12-19
  • 打赏
  • 举报
回复
看看波特率和端口设置的对不对。不要把接收事件的订阅写在TIMER中,
dcount300 2011-12-19
  • 打赏
  • 举报
回复
关键在于需要设置ReceivedBytesThreshold属性,一般为1
山貓 2011-12-19
  • 打赏
  • 举报
回复
private void Form2_Load(object sender, EventArgs e)
{
sp.Open();
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.ReceivedBytesThreshold = 1;
sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
sp.Open()
}

zhang3105002947 2011-02-10
  • 打赏
  • 举报
回复
我在wince5.0应用程序开发过程遇到类似问题,后来就这样解决啦。
zhang3105002947 2011-02-10
  • 打赏
  • 举报
回复
将SerialPort的属性值RtsEnable设置为true
风之影子 2010-08-04
  • 打赏
  • 举报
回复
首先建议你在初始化的时候就添加委托事件。

sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);

再者

无需时间控件来读取。

最后记得设置事件触发前的缓冲区字节数。
sxiaohui8709253 2010-08-04
  • 打赏
  • 举报
回复
放在timer里头干啥 要定时触发么 放在一个死循环里头看看 我以前放timer也不触发 我也不知道咋回事
最后放在死循环里面 就可以了
波特率 串口名 都要指定
阀值达不到 你这里是一字节 别人不给你发数据 也是不会触发的
jsmouse 2010-08-04
  • 打赏
  • 举报
回复
楼主的写法有问题,定时器那部分。
然后还有你com口的初始化没有定义,不知道对不对
dkling866 2010-08-04
  • 打赏
  • 举报
回复
DataReceived 方法是不是只有 有信息传输过来的时候才能执行?我用一个 类似鼠标的一个脚踏开关来控制的 怎么就是执行不到DataReceived这个方法呢?
showjancn 2010-08-03
  • 打赏
  • 举报
回复
private void Form2_Load(object sender, EventArgs e)
{
sp.Open();
sp.DtrEnable = true;
sp.RtsEnable = true;
sp.ReceivedBytesThreshold = 1;
}

private void timer1_Tick(object sender, EventArgs e)
{
sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
}

红色部分不是很好。这样会告成局部内存泄漏。


最好把它放到Form的构造函数中去。
myhope88 2010-08-03
  • 打赏
  • 举报
回复
没弄过,帮顶下
dkling866 2010-08-03
  • 打赏
  • 举报
回复
我就是用C#自带的控件 也没有办法 触发DataReceived的事件
freeboy827 2010-08-03
  • 打赏
  • 举报
回复
没有串口初始化的条件
波特率什么的

如果不满足触发的条件也不会触发的

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧