当前位置: 代码迷 >> C# >> 线程中更动UI
  详细解决方案

线程中更动UI

热度:34   发布时间:2016-05-05 04:37:56.0
线程中更改UI
我在线程中这样更改UI可以吗?会不会出现问题
如果不可以请问应该如何做?

       private void button1_Click(object sender, EventArgs e)
        {
            Thread RunThread = new Thread(new ThreadStart(RunPro));
            RunThread.Start();
        }
        public void RunPro()//static
        {
            changecolor(Color.Red);
            Thread.Sleep(1000);//延时
            changecolor(Color.Blue);
            return;
        }
        void changecolor(Color cl)
        {
            button2.BackColor = cl;
        }

------解决思路----------------------


void changecolor(Color cl)
 {
      this.Invoke(new Action(()=>{

                     button2.BackColor = cl;
 
       }));
            
 }


------解决思路----------------------
使用Form的InvokeRequired来判断,并使用Form的Invoke方法调用新建的委托实例
------解决思路----------------------
引用:
Quote: 引用:



void changecolor(Color cl)
 {
      this.Invoke(new Action(()=>{

                     button2.BackColor = cl;
 
       }));
            
 }




//我的目的是:在线程中调用一个函数,函数的功能是把按键参数传进去,然后改变颜色
public void SetBtnColor(ref Button btn)//这个要可以在线程中被调用
{
    this.Invoke(new Action(() => { btn.BackColor = Color.Red; }));//但是Lamada又不接收 ref参数 怎么办
}


把Ref去掉,直接转对象就可以了。别乱看书,误人
  相关解决方案