C# 非主线程更新主线程界面的问题?
问题描述:
假设:UI线程上有一个lable一个,TextBox一个
现在从一个非UI线程调用BegionInvoke后传递一个string类型参数更新Lable,
然后又从另一个非UI线程调用BegiobInvoke后传递一个string类型和int类型参数更新TextBox,
委托就可以用一个如:
         (1) private delegate void UpdateUiHandler(string xx);          
         (2) private delegate void UpdateUiHandlerA(int xx,int y);
         --private delegate void UpdateUiHandler(params object[] pars);
是不是我必需就要写三个相对应的方法来更新UI,还是可以将(1),(2)合起来(怎么合?)再将分别的方法合起来(又怎么合)?
如:         
C# code
private delegate void UpdateUiHandler(string xx);
        private delegate void UpdateUiHandlerA(string xx, int yy);
        private void haha()
        {
            this.BeginInvoke(new UpdateUiHandler(xx), new object[] { "xx" });   
        }
        private void hahaha()
        {
            this.BeginInvoke(new UpdateUiHandlerA(yy), new object[] { "xx", 123 });
        }
        private void xx(string xx)
        {
            label1.Text = xx;
        }
        private void yy(string xx, int yy)
        {
            textBox1.Text = xx;
            Process.Value = yy;
        }
我的意思是更新(但是不同)很少的UI都需要写很多的委托和相应的方法,有没有统一方式一起就处理了?
------解决方案--------------------     private void button2_Click(object sender, EventArgs e)
       {
           Thread th = new Thread(new ThreadStart(threadMath1));
           th.Name = "The Thread1";
           th.Start();
           frm2.ShowDialog();
       }
       public delegate void DeleteGateCallBack(string str,DateTime time);
       public void threadMath1()
       {
           frm2.label1.Invoke(new DeleteGateCallBack(this.ChangeLableText),new object[]{Thread.CurrentThread.Name,DateTime.Now});
       }
       public void ChangeLableText(string str,DateTime time)
       {
           frm2.label1.Text = str + time.ToString();
       }
------解决方案--------------------直接拖个 backgroundwork组件上去 世界就清净了
------解决方案--------------------