我有一个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
}发布于 2012-07-10 23:16:52
您可以不向主程序订阅的库中添加一个事件,该事件由您的库引发,并传回所需的数据吗?
在您的库中:
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-10 23:15:41
如果数据不需要很快(即每秒少于一次),您可以在一个线程中写入文本文件,然后在主线程中读取该文件
https://stackoverflow.com/questions/11416338
复制相似问题