private void btnRun_Click(object sender, EventArgs e)
{
btnRun.Enabled = false;
if (txtBoxTarget.Text.Equals(String.Empty) || txtBoxTimes.Text.Equals(String.Empty))
{
MessageBox.Show("请输入连接的URL和连接次数!", "提示",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
int length = Int32.Parse(txtBoxTimes.Text.Trim());
string url = txtBoxTarget.Text.Trim();
double process = 0;
int show = 0;
DateTime rightNow = DateTime.Now;
DateTime end;
TimeSpan interval;
toolStripStatusLabel.Text = "连接中";
progressBar.Visible = true;
progressBar.Minimum = 0;
progressBar.Maximum = length;
for (int i = 1; i <= length; i++)
{
try
{
// 这两句是连接某个网页的。
WebRequest myRequest = WebRequest.Create(url);
WebResponse myResponse = myRequest.GetResponse();
myResponse.Close();
}
catch
{
txtBoxReport.Text = "网络连接有误!";
return;
}
progressBar.PerformStep();
process = i / length;
show = (int)process * 100;
}
progressBar.Visible = false;
toolStripStatusLabel.Text = "已就绪";
txtBoxReport.Text = "连接 " + url + " " + length + "次。";
end = DateTime.Now;
interval = end - rightNow;
txtBoxReport.Text += "\r\n共耗时" + interval.TotalMilliseconds + "毫秒。";
btnRun.Enabled = true;
}
利用委托,Invoke方法,可以实现更新UI。也就是进度条效果。
.NET的话,结合backgroundworker和进度条控件很容易实现。至于怎么使用,你去查下MSDN就好了,很容易的。backgroundworker一共就三个事件,属性也就两三个
如果是winform的话就简单了,用BackgroundWorker 就可以。它是一个专门处理后台线程的组件。
结合进度条控件,很方便的实现了进度条的功能。
一般情况下 是在 在后台线程中处理进度逻辑操作。主线程处理进度条的显示、变化。它们之间的通信用委托实现。在后台线程中用Invoke 调用委托实例来操作主线程中的显示。
webform的话可能有点麻烦,起码不准确。一般的就是显示一个gif告诉客户,正在做。