首先,我已经看过了,但似乎没有得到这个问题的帮助。
基本上我的应用程序使用以下方法触发从串口接收的数据上的事件:
sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
我使用以下方式处理收到的数据:
private static void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
string inData;
bool passed;
SerialPort spRead = (SerialPort)sender;
inData = spRead.ReadLine();
TwinCat comm = new TwinCat();
passed = comm.passiButton(inData);
if (passed) comm.disposeComm();
else MessageBox.Show("Error Closing Comm");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
除此之外,我有一个复选框控件,我想通过检查或不通过,即一个额外的bool变量,以便我可以改变如何处理数据取决于是否选中复选框。
请注意,条件尚未实现,因为我无法在事件中传递bool变量。
答案 0 :(得分:1)
假设CheckBox
和SerialPort
的格式相同......
从事件处理程序中删除static
关键字,然后从DataReceived
事件处理程序安全地访问非GUI变量。
// member variable
// update the value during the checkbox's CheckChanged event handler
private bool isChecked;
private void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
...
if (isChecked)
{
// do something special
}
...
}
编辑:进行了更改以避免跨线程GUI操作