0

我有一些事件会触发。所以我必须调用对实例状态和包含多个表单控件(如面板、图片框、按钮)的属性进行一些更改的方法。最后,这两个控件应该从一个 panel1 移动到另一个(panel2.add)。

所以我的线程有问题。用这样的功能改变一个标签是没有问题的:

private void SetText(string valuefromdifferentthread) {

        if (this.label1.InvokeRequired)
        {
            SetTextCallback d = new SetTextCallback(SetText);
            this.Invoke(d, new object[] { rfid });
        }
        else
        {
            label1.text="valuefromdifferentthread"                
        }
    }

但是如何对几个控件进行更改?(没有为每个人编写方法,最后如何更改父控件)

我什至尝试将另一个事件处理程序放入 SomeClass StateChanged 中,该事件处理程序在“状态”变为“真”时触发(并且状态在触发第一个事件时变为真)但无论如何我在踩踏时遇到问题

“在一个线程上创建的控件不能作为另一个线程上的控件的父级。”

下面我写了我项目的假(小)代码

//-------------------------------------------------------------------------- List<SomeClass> allinstancesinList;

事件是

SerialPort.DataReceived+=dothis;

private void dothis(...)
{
    var mystring=serialPort.ReadLine();
    var curInstance=allinstancesinList.Single(w=>w.id=mystring);
    curInstance.changed=true;
    runthisfunction(curInstance);
}






runthisfunction(SomeClass sc)
{
    //...here i make multiple operations with form controls of instance
    sc._ContainerMainPanelBackgroundImageDefault=somepicture;
    sc.__ContainerMainPanelBackColorSelected =backcolor;
    //and finally i have to add to another panel

    Panel2.add(sc.ContainerMainPanel);//which contains other panel and images
}


Class SomeClass
{
//...
        PictureBox _ControlPictureBox;
        Panel _ContainerMainPanel;
        Label _ControlLabelName;
        //BackgroundImage Clicked and default and ControlSelected;
        Image _ContainerMainPanelBackgroundImageDefault;
        Color _ContainerMainPanelBackColorDefault = Color.White;
        Image _ContainerMainPanelBackgroundImageSelected;
        Color _ContainerMainPanelBackColorSelected = Color.Yellow;



//...
}

感谢提前

我无法将我的问题作为答案发布(在 8 小时内),所以我通过 Martin Mulder 的 链接对其进行编辑(感谢他)我找到了一个非常简单的方法))))

private void DoGUISwitch()
{ 
    Invoke( ( MethodInvoker ) delegate {
        object1.Visible = true;
        object2.Visible = false;
    }
} 
4

0 回答 0