![](/img/trans.png)
[英]When removing a TabPage from the TabControl, how do I select the next time in the tabcontrol? C#
[英]How to pragmatically select tabPage2 of tabControl1 in C# in serialPort1 receiveData event?
我有一个serialPort1对象,用于从RS232端口接收数据。 当字符串“完成”来自RS232时,我想选择tabControl1的tabPage2。 这段代码是我想要做的。
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
RxString = serialPort1.ReadExisting();
if(RxString == "finish")
{
tabControl1.SelectedIndex = 1;
}
this.Invoke(new EventHandler(DisplayText));
}
当我使用"tabControl1.SelectedIndex = 1;"
在按钮事件中,当我单击按钮时效果很好,但是当我将其放在“ serialPort_DataReceived”事件中时,它显示了一个错误:
错误为:“跨线程操作无效:从创建该线程的线程以外的其他线程访问控件'tabControl1'。”
serialPort1_DataReceived发生在主线程以外的辅助线程中。 您需要使用委托来执行这种跨线程操作。 这是获得此想法的示例代码-
// This delegate enables asynchronous calls
delegate void SetIndexCallback(string text);
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (this.tabControl1.InvokeRequired)
{
SetIndexCallback d = new SetIndexCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
tabControl1.SelectedIndex = int(text);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.