0

負荷を計量するためのモジュールを備えたWPFアプリケーションがあります。シリアルポートの通信は計量ブリッジごとに異なるため、計量モジュールを別のdllにします。

負荷の計量にシリアルポートを使用するクラスライブラリを作成しています。重みをメインプログラムに戻す必要があります。

double GetWeights()
{

 spWeigh = new SerialPort("COM1", 2400, Parity.None, 8, StopBits.One);
            spWeigh.RtsEnable = false;
            spWeigh.DtrEnable = false;
            spWeigh.Handshake = Handshake.None;
            spWeigh.ReadTimeout = 10000;
            spWeigh.DataReceived +=spWeigh_DataReceived;

}

ただし、受信したデータは別のスレッドにあります。メインプログラムで体重を取り戻すにはどうすればよいですか?

 void spWeigh_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
      // code here
    }
4

2 に答える 2

1

メインプログラムがサブスクライブし、ライブラリによって発生するイベントをライブラリに追加して、必要なデータを返すことはできませんか?

ライブラリ内:

class YourLibrary
{
    public delegate void RawDataEventHandler(object sender, RawDataEventArgs e);
    public event RawDataEventHandler RawDataReceived;

    void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string ReceivedData = _serialPort.ReadExisting();
        if (RawDataReceived != null)
            RawDataReceived(this, new RawDataEventArgs(ReceivedData));
    }
}

class RawDataEventArgs : EventArgs
{
    public string Data { private set; get; }

    public RawDataEventArgs(string data)
    {
        Data = data;
    }
}

メインプログラムの場合:

class MainProgram
{
    YourLibrary library = new YourLibrary();
    library.RawDataReceived += new YourLibrary.RawDataEventHandler(library_RawDataReceived);

    void library_RawDataReceived(object sender, RawDataEventArgs e)
    {
        // Your code here - the data passed back is in e.Data
    }
}
于 2012-07-10T15:16:52.093 に答える
0

データを高速にする必要がない場合(つまり、1秒に1回未満)、1つのスレッドでテキストファイルに書き込み、メインスレッドで読み取ることができます。

于 2012-07-10T15:15:41.030 に答える