您的位置:首页 > 编程语言 > C#

C# 中子线程控制进度条的一个简单例子

2012-07-22 10:08 531 查看

这个问题来自社区提问,代码保留一份用来以后回答


using
System;


using
System.ComponentModel;


using
System.Windows.Forms;


namespace
WindowsApplication4


{


///
<summary>


///
gui 类


///
</summary>



public partial
classForm1 : Form


{


public
Form1()


{


InitializeComponent();


}


private
voidbutton1_Click(
objectsender, EventArgs e)


{


//
用子线程工作



newSystem.Threading.Thread(
new System.Threading.ThreadStart(StartDownload)).Start();


}


//
开始下载



publicvoid
StartDownload()


{


Downloader downloader=
newDownloader();


downloader.onDownLoadProgress+=
new Downloader.dDownloadProgress(downloader_onDownLoadProgress);


downloader.Start();


}


//
同步更新ui



voiddownloader_onDownLoadProgress(
long total, longcurrent)


{


if
( this
.InvokeRequired)


{


this
.Invoke(new
Downloader.dDownloadProgress(downloader_onDownLoadProgress),new
object[]
{ total, current });


}


else


{


this
.progressBar1.Maximum=
( int
)total;


this
.progressBar1.Value=
( int
)current;


}


}


}




///
<summary>


///
下载类


///
</summary>



public class
Downloader


{


//
委托



publicdelegate
void
dDownloadProgress(long
total, long current);


//
事件



publicevent
dDownloadProgress onDownLoadProgress;


//
开始模拟工作



publicvoid
Start()


{


for
( int
i =0
; i <
100; i
++ )


{


if
(onDownLoadProgress!=
null)


onDownLoadProgress(100
, i);


System.Threading.Thread.Sleep(100
);


}


}


}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: