SerialPort.Read方法挂起

时间:2014-03-20 22:34:02

标签: c# serial-port

构建了一个简单的SerialPort客户端和服务器来测试写入和读取COM端口。问题是,当我尝试阅读时,它会挂起。我知道串口通信本身工作正常,因为我从终端服务器传输并在超级终端客户端应用程序上接收数据没问题。这是我服务器的代码:

public partial class Form1 : Form
{
    SerialPort Port = new SerialPort("COM5", 9600, Parity.None, 8, StopBits.One);

    public Form1()
    {
        InitializeComponent();
    }

    private void btnSendText_Click(object sender, EventArgs e)
    {
        Port.Open();
        Port.Write(txtSendText.Text + "!%");
        Port.Close();
    }
}

以下是我的客户的代码:

    private System.IO.Ports.SerialPort port = new System.IO.Ports.SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
    public Form1()
    {
        InitializeComponent();
        this.port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.port_DataReceived);
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        CheckForIllegalCrossThreadCalls = false;
        if (port.IsOpen == false)
            port.Open();
    }

    private void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        textBox1.Text = (port.ReadTo("!%"));
        if (port.ReadExisting().Length == 0)
        {
            listBox1.Items.Add(textBox1.Text);
            textBox1.Text = "";
        }
    }

在具有各种不同类型的SerialPort读取重载的调试器中反复进行故障排除,但它仍然挂在port.ReadTo(...)上。有没有人有什么建议? TIA。

1 个答案:

答案 0 :(得分:0)

感谢所有发帖的人。事实证明,我使用SharpDevelop_4.4.1.9729来构建和调试应用程序。当我读这篇文章时,我开始怀疑开源IDE调试器,

http://social.msdn.microsoft.com/Forums/vstudio/en-US/ed9605b6-3c97-4b53-949a-f56f9da58306/serialport-hang?forum=netfxbcl

所以我再次尝试了,这次使用的是Microsoft Visual Studio 2010 Professional,它没有问题!

更新:

另外,如果我在Sharp Develop中选择“Run without debugger”选项,它也可以不挂,所以它肯定是Sharp Develop调试器的一个问题。