当C#程序使用到多线程时,不同进程间不能相互调用,可使用委托来处理;
以下需求案例为:
Winform程序中有一个进度条和一个后台backgroundworkder,当后台进程完成每一个阶段时更新窗体中的进度条信息。
//在backgroundwork中变更ProcessBar的值
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// do something
UpdateProcessBarAdd1();
}
//创建委托
private delegate void UpdateProcessBarAdd1_Delegate();
private void UpdateProcessBarAdd1()
{
//此处采用递归的简写方法
if (progressBar1.InvokeRequired)
{
UpdateProcessBarAdd1_Delegate mDelegate = new UpdateProcessBarAdd1_Delegate(UpdateProcessBarAdd1);
progressBar1.Invoke(mDelegate);
//若需要传入参数,请参照如下:
//progressBar1.Invoke(mDelegate,new object[] { "参数1","参数2","参数3"});
}
else
{
progressBar1.Value += 1;
}
}