您的位置:首页 > 产品设计 > UI/UE

winform进程间操作UI控件

2015-07-19 22:52 435 查看
一,问题说明。

当在主线程之外新建一个线程之后,我们想通过新建线程修改主界面控件的属性等操作,此时,Windows会报错,提示进程间操作UI无效。

二,解决方法。

1,并不高明的做法,有一定作用,并不推荐。

public Form1()
  {
InitializeComponent();
    CheckForIllegalCrossThreadCalls = false;//这种设置相当于让vs同意这样进程间操作
  }


2,利用委托来进行操作。相当于在新建进程和主进程间出现了一个第三方,这个第三方把新建进程的需求传递给主进程,然后主进程执行。

//无参数的方法
private void button1_Click(object sender, EventArgs e)//按钮事件中新建线程
{
ThreadStart threadstart = new ThreadStart(dosomething);
Thread mythread = new Thread(threadstart);
mythread.Start();
}
delegate void mydelegate();  //委托方法
public void dosomething() //新线程中需要做的事情
{
if (this.InvokeRequired)
{
this.Invoke(new mydelegate(dosome));
}
else
{
}
}
public void dosome()//实际操作UI的方法,通过委托执行
{
button1.Text = "Hellow  C#";
}


3,考虑有参数的方法情况

private void button1_Click(object sender, EventArgs e)
{
Thread mythread = new Thread(new ParameterizedThreadStart(dosomething));//新建线程,关联该线程将要执行的方法
mythread.Start("Hellow C#");
}
delegate void mydelegate(string str);
public void dosomething(object obj)
{
if (this.InvokeRequired)
{
this.Invoke(new mydelegate(dosome),obj);
}
else
{
}
}
public void dosome(string  str)
{
button1.Text = str;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: