使用托管、事件实现线程通信,在这里例子中通过线程2的事件来更新UI线程的进度条,在实际应用中有防界面卡死的意义。
线程2的类中,我们定义一个事件RateChanged;
public
delegate
void
ProgressRate(
int
rate);
public event ProgressRate RateChanged;
public event ProgressRate RateChanged;
在窗体中定义一个进度条progressbar1
core c
=
new
core ();
//
实现类
c.RateChanged += new core.ProgressRate(c_RateChanged); // 添加事件
ThreadPool.QueueUserWorkItem( new WaitCallback(c.WriteRandomID), 100000 ); // 启动线程
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 });
}
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 });
}