目前本人知道有两种方法,第二种方法虽然简单,但如果是其他关键对象出现这样的错误容易使程序崩溃(有点危言耸听),至少会导致检查不出错误。
一、使用委托实现
1.不带参数的委托
private delegate void MyInvoke()1;//定义一委托
private void LoadNewPict()//需要委托的函数,这函数里就是对线程里不能操作的控件的操作
使用时可以
MyInvoke1 mi = new MyInvoke1(LoadNewPict);
this.Invoke(mi); //同步委托 受主进程影响
mi.BeginInvoke(null,null); //异步委托 不受 主进程影响
也可以
this.Invoke(new MyInvoke(LoadNewPict));
2.带参数的委托
private delegate void MyInvoke2(string usl,string filename);//定义
使用
MyInvoke2 mi2 = new MyInvoke2(DownFile);
this.Invoke(mi2, "http://localhost/update", file); //同步委托 受主进程影响
或
mi2.BeginInvoke("http://localhost/update", file,null,null); //异步委托 不受 主进程影响
public void DownFile(string URL, string Filename)//下載文件的下載進度條
二、关闭检查(在构造函数中添加如下代码即可)
Control.CheckForIllegalCrossThreadCalls = false;