1

シリアルポートクラスがあり、GUIを介して送受信を制御し、シリアルポートからのデータの受信(または他のイベント)に基づいてGUIを更新したいと考えています。したがって、関連する2つのクラスは、シリアルクラスとメインウィンドウクラスです。

以下にコンパイルするコードがありますが、実行しようとすると例外が発生します。

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";
    }
}

だから、私はここで何が間違っているのですか?これを行うための最良の方法は何ですか?

4

1 に答える 1

3

インスタンスを作成しないと myPort にアクセスできません。

MySerThread myPort = new MySerThread();
于 2012-12-12T23:06:18.003 に答える