日期:2014-05-17  浏览次数:20776 次

在某个线程上创建的控件不能成为在另一个线程上创建的控件的父级
这个问题不是用委托可以搞定吗?为什么我加上了依然会报这个异常?
C# code

private delegate void flush();

public void F() {
    flush f = new flush(aa);
    panel.Invoke(f);
}
public void aa() {
    panel.Controls.Clear();
    panel.Controls.Add(panel1);   //报异常
}


请问为什么啊?

------解决方案--------------------
http://wenwen.soso.com/z/q232263434.htm
看看这个
------解决方案--------------------
C# code

private delegate void flush();

public void F() {
    flush f = new flush(aa);
    //panel.Invoke(f);
    //这里要用主线程去调用
    this.Invoke(f);
}
public void aa() {
    panel.Controls.Clear();
    panel.Controls.Add(panel1);   //报异常
}

------解决方案--------------------
panel1是在什么位置定义的,看起来应该是访问panel1出现的问题
------解决方案--------------------
private delegate void flush();

public void F() {
flush f = new flush(aa);
panel.Invoke(f);
}
public void aa() {
panel.Controls.Clear();
panel.Controls.Add(panel1); //报异常
}
-----------------
pub void aa()函数改为:

public void aa()
{
flush a=new deldegate()
{
 panel.Controls.Clear();
panel.Controls.Add(panel1);
}
panel.invoke(a);
}