0
public partial class test1 : SkinMain { public test1() { InitializeComponent(); init(); } public void init() { //创建一个新线程 Thread m_thread = new Thread(ThreadFun); m_thread.Start(); } private void ThreadFun() { //这就是不是用创建控件的线程访问它,所以运行到这里就会报错 panel10.name="test"; } }或者是,你直接把当前的窗体控件传给其他类调用访问修改控件的时候也会报这个错。 例如:
public partial class test1 : SkinMain
{
public test1()
{
InitializeComponent();
init();
}
public void init()
{
//传参调用其他类访问或修改控件,
test2 t=new test2();
t.modity(this.panel10);
}
}
解决办法: 1:直接在构造函数代码中加入(不推荐) //解决线程间操作无效: 从不是创建控件的线程访问它
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 2:使用委托 把代码改成这样:public partial class test1 : SkinMain
{
public test1()
{
InitializeComponent();
init();
}
public void init()
{
//使用委托
ThreadFunDelegate threadFunDelegate = new ThreadFunDelegate(ThreadFun);
threadFunDelegate.Invoke();
}
//声明委托线程,解决线程间操作无效: 从不是创建控件的线程访问它
public delegate void ThreadFunDelegate();
private void ThreadFun()
{
//正常运行
panel10.name="test";
}
}
版权声明:本文章为原创文章,未经作者允许禁止转载引用,转载引用时请注明来源 http://www.b0c0.com/c窗体运行提示线程间操作无效-从不是创建控件的\
0