【发布时间】:2012-02-25 00:35:10
【问题描述】:
您好,我仍然希望仅在选择 TabItem1 时从串行端口接收 6 个字节。 并设置复选框状态取决于该字节... 示例:但它不起作用:/
private void receiveData()
{
for(int i = 0; i < 3; ++i)
inputs[i] = serialPort.ReadByte();
for (int i = 0; i < 3; ++i)
outputs[i] = serialPort.ReadByte();
checkBoxI1.IsChecked = inputs[0] == 32 ? true : false;
checkBoxI2.IsChecked = inputs[1] == 32 ? true : false;
checkBoxI3.IsChecked = inputs[2] == 32 ? true : false;
checkBoxQ1.IsChecked = outputs[0] == 32 ? true : false;
checkBoxQ2.IsChecked = outputs[1] == 32 ? true : false;
checkBoxQ3.IsChecked = outputs[2] == 32 ? true : false;
}
// Tab change
private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (tabControl1.SelectedItem == tabItem1)
{
serialPort.Close();
try
{
receiveThread.Abort();
}
catch (NullReferenceException)
{
}
}
else if (tabControl1.SelectedItem == tabItem2)
{
serialPort.Open();
receiveThread = new Thread(receiveData);
receiveThread.Start();
}
}
【问题讨论】:
-
那么它是如何“不工作”的呢?你有什么行为?到目前为止你是如何调试它的?您看到了哪些错误消息?
-
WPF/WinForms/或?为什么你设置
multithreading标签,异步操作什么都没有 -
这里
checkBoxI1.IsChecked = inputs[0] == 32 ? true : false;....我得到了InvalidOperationException - 调用线程无法访问这个对象,因为另一个线程拥有它。 -
有人编辑了我的标签...我有不同的...
-
@hradecek:不。像这样:
checkBoxI3.IsChecked = inputs[2] == 32;
标签: c# multithreading serial-port