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组件上去 世界就清净了
------解决方案--------------------