繁体   English   中英

如何在serialPort1 receiveData事件中的C#中实用地选择tabControl1的tabPage2?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM