我自己的一个进程要更改主窗体的proBar.Maximum。
这是原来的代码:
this.proBar.Maximum = this.selset.Count; //编译无措,vs05下调试出错,进程间无法访问
我baidu过,说这种情况要使用委托。但本人太菜,试了半天也不行,大侠帮忙看看。
这种情况下委托应该怎么用呢?
这是原来的代码:
this.proBar.Maximum = this.selset.Count; //编译无措,vs05下调试出错,进程间无法访问
我baidu过,说这种情况要使用委托。但本人太菜,试了半天也不行,大侠帮忙看看。
这种情况下委托应该怎么用呢?
{
proBar.Maximum = selset.Count;
}void Form()
{
Thread t = new Thread(set);
t.Start();
t.Join();
}
//这样是不行的//方法1用委托set()方法不变,但这样就不能使用Theard,而是自动使用系统线程池
delegate void setDeleagte();void Form()
{
setDeleagte setdl = new setDeleagte(set);
this.BeginInvoke(setdl); //这样就是在UI线程上调用了set方法,这个BeginInvoke需要以为委托参数
}//方法2,修改set方法,就可以使用自己的Theard
public void set()
{
//判断这个方法被调用是在创建控件线程还是非创建控件线程
if (this.InvokeRequired)
{
setDeleagte setdl = new setDeleagte(set);
this.BeginInvoke(setdl);
}
else
this.txtName.Text = "ssss";
}
在窗体构造函数里面加条语句: Form.CheckForIllegalCrossThreadCalls = false;你出错的原因是你的控件是主线程(main)生成的,而现在其他线程要使用它,05觉得不安全,就禁止你这样做 。加上这条语句后呢,相当于你在说:05你不用去检查线程之间的非法调用了,无论是哪个线程创建的控件,其他线程都可以用并修改
学习……