[英]How to get weight from serial port?
我有一个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
}
您是否可以将事件添加到您的主程序所预订的库中,而该事件是由您的库引发的,并传递回所需的数据?
在您的图书馆中:
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
}
}
如果数据不需要很快(即每秒少于一次),则可以在一个线程中写入文本文件,然后在主线程中从中读取
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.