一.
概述
在使用C#进行应用 程序 设计 时,经常会采用多线程 的方式进行一些后台 任务的工作。对于不同的应用场景,使用的策略也不尽相同。
1.
后台循环 任务,少量UI更新:例如批量 上传文件 ,并提供进度。这种情况使用BackgroundWorker组件 是非常好的选择。
2.
耗时的后台任务:这里的耗时任务是指一个时间较长的任务,并且不能精确获取 进度,如:调用一个远程WebService接口 。这种情况可以开两个线程,一个工作,一个更新UI(不能提供进度,只能显示动画表示系统 在运行中)。
3.
耗时的UI任务:当工作压力集中在UI响应上时,可以在工作者线程中增加延时,从而让UI线程获得响应时间。整个工作的总体时间会增加,但用户响应效果会好很多。
二.
后台的循环任务,少量UI更新
这种情况使用BackgroundWorker组件是最好的选择。(详见附一)
三.
后台耗时任务
在后台执行一个不可分解的耗时任务,需要进行界面 更新,以便让客户看上去程序有所响应。这种情况下,UI线程一般也不知道工作线程何时结束,所以一般执行循环任务,当工作线程结束后,关闭UI线程就可以了。
Thread uithread = null ;
private void btnStart_Click(object sender, EventArgs e)
{
uithread = new Thread (new ThreadStart (this .UpdateProgressThread));
uithread.Start();
Thread workthread = new Thread (new ThreadStart (this .DoSomething));
workthread.Start();
}
private void DoSomething()
{
Thread .Sleep(5000);
uithread.Abort();
MessageBox .Show("work end" );
}
private void UpdateProgressThread()
{
for (int i = 0; i < 10000; i++)
{
Thread .Sleep(100);
<