新线程上的SerialPort缓冲区

时间:2010-08-14 01:46:01

标签: c# multithreading

我有从FormGUI访问的MySerialPort类/对象。创建MySerialPort对象后,我想打开它,并不断接收数据。数据将在对象的数据缓冲区中存储和管理。 FormGUI的memoEdit将显示MySerialPort对象缓冲区中收到的代码。

如何在[port] .ReadExisting方法中使用“new Thread()”?

using System;
using System.IO.Ports;
using System.Threading;

class MySerialPort
{
   public SerialPort CreatePort(string portName, int portSpeed, int portParity, int portDataSize, int portStopBits)
   {
      // fixed values while testing
      var port = new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);
      return port;
   }

   public void OpenPort(SerialPort port)
   {
      port.Open();
      new Thread(() => port.ReadExisting).Start();
      while (true)
      {
         // Send to buffer
         // Maybe some break condition
      }
}

1 个答案:

答案 0 :(得分:0)

Observer模式现在正在运行,我得到了我期望从串口获得的数据,感谢Henk。

public partial class MyGUI : Form
{
    private MySerialPort MyPort = new MySerialPort();

    public MyGUI()
    {
        InitializeComponent();
        MyPort.OnDataBufferUpdate += DisplayNewData;
    }

    public void DisplayNewData(object sender, EventArgs e)
    {
        if (this.InvokeRequired)
        {
            BeginInvoke(new MethodInvoker(delegate() { DisplayNewData(sender, e); }));
        }
        else
        {
            memoEdit.Text = MyPort.DataBuffer;
        }
    }
}

public class MySerialPort
{
    public MySerialPort()
    {
        // Initialize serial port
        _Port.DataReceived += _Port_DataReceived;
    }

    public delegate void HandleDataBufferUpdate(object sender, EventArgs e);
    public event HandleDataBufferUpdate OnDataBufferUpdate = delegate {};

    private void _Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        // Set _Port.DataBuffer from serial port buffer, then activate event below to signal form
        OnDataBufferUpdate(this, EventArgs.Empty);
    }
}
相关问题