SerialDataReceivedEventHandler未触发

时间:2014-08-01 16:44:19

标签: c# serial-port

我正在尝试使用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)));

        }

    }
}
}

所以任何人都可以在这个问题上帮助我

1 个答案:

答案 0 :(得分:0)

尝试使用没有设置缓冲区大小的端口,超时,rts / dts启用如果您在没有完全理解为什么这样做的情况下弄乱了默认值,您可能会在脚下射击。例如,如果读取仅在一秒钟(1000毫秒)后超时,则在超时之前可能不会收到任何数据。

您要发送的数据是文本吗?如果没有,您可能会收到无法转换为字符串的数据,因此不会生成任何输出。

此外,您正在读取数据以进行调试,然后尝试读取要显示的另一行数据。第一次读取后,缓冲区将为空。