使用托管、事件实现线程通信
使用托管、事件实现线程通信,在这里例子中通过线程2的事件来更新UI线程的进度条,在实际应用中有防界面卡死的意义。
线程2的类中,我们定义一个事件RateChanged;
public delegate void ProgressRate(int rate);
public event ProgressRate RateChanged;
在窗体中定义一个进度条progressbar1
core c=new core ();//实现类
c.RateChanged += new core.ProgressRate(c_RateChanged);//添加事件
ThreadPool.QueueUserWorkItem(new WaitCallback(c.WriteRandomID),100000);//启动线程
代码
delegate void UpdateProgressBar(int rate);
void s_UpdateProgressBar(int rate)//实现实体
{
progressBar1.Value = rate;
Console.WriteLine(rate);
}
void c_RateChanged(int rate)//事件
{
this.Invoke(new UpdateProgressBar(s_UpdateProgressBar), new object[] { rate });
}