处理WPF GUI类中的串行线程事件

时间:2012-12-12 22:33:20

标签: c# wpf events .net-4.0 serial-port

我有一个串口类,我想通过我的GUI控制发送/接收,并根据从串口(或其他事件)接收的数据进行GUI更新。所以两个相关的类是串行类和主窗口类。

我有下面的代码编译,但是当我尝试运行时出现异常。

public class MySerThread
{
    public SerialPort serport;
    public event SerialDataReceivedEventHandler newSerData;

    public MySerThread()
    {
        serport = new SerialPort("COM1", 115200);
        serport.Open();
        serport.DataReceived += DataReceivedHandler;
    }

    public void DataReceivedHandler(object s, SerialDataReceivedEventArgs e)
    {
        byte[] data = new byte[serport.BytesToRead];
        serport.Read(data, 0, data.Length);

        // here's where I think I'm going wrong?
        if(newSerData != null)
            newSerData(s,e);
    }
}

然后在我的GUI类......

public partial class MainWindow : Window
{
    MySerThread myPort;

    public MainWindow()
    {
        // Exception triggers here
        myPort.newSerData += DisplaySerDataHandler;
    }

    private void DisplaySerDataHandler(object sender, SerialDataReceivedEventArgs e)
    {
        this.ReceivedCallback(e);
    }

    private void ReceivedCallback(SerialDataReceivedEventArgs e)
    {
        if(this.someTextBlock.Dispatcher.CheckAccess())
        {
            this.UpdateTextBlock(e);
        }
        else
        {
            this.someTextBlock.Dispatcher.BeginInvoke(new Action<SerialDataReceivedEventArgs>(this.UpdateTextBlock), e);
        }
    }

    private void UpdateTextBlock(SerialDataReceivedEventArgs e)
    {
        someTextBlock.Text = "got new data";
    }
}

那么,我在这里做错了什么?这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:3)

如果不创建实例,则无法访问myPort。

MySerThread myPort = new MySerThread();