我正在尝试使用C#编写一个从串口接收的代码。
我正在使用VSPC功能从两个端口COM27和COM28生成桥接器 当我写COM27将数据发送到COM28并且我可以使用Putty连接看到它时,但是当我尝试使用以下代码创建程序时它不起作用并且SerialDataReceivedEventHandler没有触发。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
using System.Threading;
using System.Diagnostics;
namespace csh_serial2_pic
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//
private void button1_Click(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();
foreach (string port in ports)
{
comboBox1.Items.Add(port);
}
}
//
string t;
private void button2_Click(object sender, EventArgs e)
{
t = comboBox1.Text.ToString();
sErial(t);
}
// Method
SerialPort sp;
void sErial(string Port_name)
{
//ThreadPool.SetMinThreads(2, 4);
sp = new SerialPort(Port_name, 9600, Parity.None, 8, StopBits.One);
sp.ReadTimeout = 1000;
sp.WriteTimeout = 1000;
sp.ReadBufferSize = 4096;
sp.ReceivedBytesThreshold = 1;
//
sp.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandeler);
sp.Open();
sp.DtrEnable = true;
sp.RtsEnable = true;
//System.Threading.Thread.Sleep(10);
//sp.Close();
}
//
private void DataReceivedHandeler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender ;
Debug.Print("receiving!");
string data = sp.ReadExisting();
Console.WriteLine("received: " + data);
Debug.Print(data);
string w = sp.ReadLine();
if (w != string.Empty)
{
Invoke(new Action (() => richTextBox1.AppendText(w)));
}
}
}
}
所以任何人都可以在这个问题上帮助我
答案 0 :(得分:0)
尝试使用没有设置缓冲区大小的端口,超时,rts / dts启用如果您在没有完全理解为什么这样做的情况下弄乱了默认值,您可能会在脚下射击。例如,如果读取仅在一秒钟(1000毫秒)后超时,则在超时之前可能不会收到任何数据。
您要发送的数据是文本吗?如果没有,您可能会收到无法转换为字符串的数据,因此不会生成任何输出。
此外,您正在读取数据以进行调试,然后尝试读取要显示的另一行数据。第一次读取后,缓冲区将为空。