有个System.Windows.Forms.ProgrssBar类,这个类就可以完成进度条的操作,具体可以查MSDN
解决方案 »
- windows服务停止时出错
- Entity Framework 的connectionString意思??
- C#问题
- C#中取整数的高字节和低字节
- 求C# Primer电子版,不要C# Primer Plus``有的给个地址wa``
- 修改数据后,需重绑定数据到文本框,如this.txtColor.DataBindings.Add("Text",ds,"PRDT.PRDT_COLOR");提示“发生这会使用集合中的两个绑
- 如何将框架里的INPUT的内容取出来,放到我指定的aspx.cs文件中的变量中呢?????
- 读取xml出了问题,请问怎么解决?
- 在winform下DataGridView的问题
- 怎样提取自顶消息中的参数
- 紧急求救,C#发送传真
- 请问 必须得安装VS,才能使用.NET反编译器Reflector吗?? 直接不能打开吗?
下面给个例子:MSDN上的using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;class FibonacciNumber : Form
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new FibonacciNumber());
} private StatusStrip progressStatusStrip;
private ToolStripProgressBar toolStripProgressBar;
private NumericUpDown requestedCountControl;
private Button goButton;
private TextBox outputTextBox;
private BackgroundWorker backgroundWorker;
private ToolStripStatusLabel toolStripStatusLabel;
private int requestedCount; public FibonacciNumber()
{
Text = "Fibonacci";
// Prepare the StatusStrip.
progressStatusStrip = new StatusStrip();
toolStripProgressBar = new ToolStripProgressBar();
toolStripProgressBar.Enabled = false;
toolStripStatusLabel = new ToolStripStatusLabel();
progressStatusStrip.Items.Add(toolStripProgressBar);
progressStatusStrip.Items.Add(toolStripStatusLabel); FlowLayoutPanel flp = new FlowLayoutPanel();
flp.Dock = DockStyle.Top; Label beforeLabel = new Label();
beforeLabel.Text = "Calculate the first ";
beforeLabel.AutoSize = true;
flp.Controls.Add(beforeLabel);
requestedCountControl = new NumericUpDown();
requestedCountControl.Maximum = 1000;
requestedCountControl.Minimum = 1;
requestedCountControl.Value = 100;
flp.Controls.Add(requestedCountControl);
Label afterLabel = new Label();
afterLabel.Text = "Numbers in the Fibonacci sequence.";
afterLabel.AutoSize = true;
flp.Controls.Add(afterLabel);
goButton = new Button();
goButton.Text = "&Go";
goButton.Click += new System.EventHandler(button1_Click);
flp.Controls.Add(goButton); outputTextBox = new TextBox();
outputTextBox.Multiline = true;
outputTextBox.ReadOnly = true;
outputTextBox.ScrollBars = ScrollBars.Vertical;
outputTextBox.Dock = DockStyle.Fill; Controls.Add(outputTextBox);
Controls.Add(progressStatusStrip);
Controls.Add(flp); backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// This method will run on a thread other than the UI thread.
// Be sure not to manipulate any Windows Forms controls created
// on the UI thread from this method.
backgroundWorker.ReportProgress(0, "Working...");
Decimal lastlast = 0;
Decimal last = 1;
Decimal current;
if (requestedCount >= 1)
{ AppendNumber(0); }
if (requestedCount >= 2)
{ AppendNumber(1); }
for (int i = 2; i < requestedCount; ++i)
{
// Calculate the number.
checked { current = lastlast + last; }
// Introduce some delay to simulate a more complicated calculation.
System.Threading.Thread.Sleep(100);
AppendNumber(current);
backgroundWorker.ReportProgress((100 * i) / requestedCount, "Working...");
// Get ready for the next iteration.
lastlast = last;
last = current;
}
backgroundWorker.ReportProgress(100, "Complete!");
} private delegate void AppendNumberDelegate(Decimal number);
private void AppendNumber(Decimal number)
{
if (outputTextBox.InvokeRequired)
{ outputTextBox.Invoke(new AppendNumberDelegate(AppendNumber), number); }
else
{ outputTextBox.AppendText(number.ToString("N0") + Environment.NewLine); }
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
toolStripProgressBar.Value = e.ProgressPercentage;
toolStripStatusLabel.Text = e.UserState as String;
} private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error is OverflowException)
{ outputTextBox.AppendText(Environment.NewLine + "**OVERFLOW ERROR, number is too large to be represented by the decimal data type**"); }
toolStripProgressBar.Enabled = false;
requestedCountControl.Enabled = true;
goButton.Enabled = true; } private void button1_Click(object sender, EventArgs e)
{
goButton.Enabled = false;
toolStripProgressBar.Enabled = true;
requestedCount = (int)requestedCountControl.Value;
requestedCountControl.Enabled = false;
outputTextBox.Clear();
backgroundWorker.RunWorkerAsync();
}
}
像这样的计算可以报告进度,那么像读写数据库之类的一系列操作怎么报告呢?
││博客空间:http://blog.csdn.net/lovingkiss
││资源下载:http://download.csdn.net/user/lovingkiss
││Email:loving-kiss@163.com [MSN也是这个]
││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤
看我的资源,一行代码解决进度等待问题
在程序中,的某些点,你认为可以让进度条增长的地方,就 processbar1.Value = 你想要的值,只要不超过最大值就行,在程序中分别用几个点,都这么写,每次value加一点
然后再程序的最后 再写上processbar1.Value = 最大值 就可以了,想重置就让value = 0。
winform肯定要使用多线程啊,不然没反映,或者阻塞主线程
vb code :
dim BackgroundWorker1as BackgroudWorker = new BackgroudWorker()
BackgroundWorker1.WorkerReportsProgress = True
AddHandler BackgroundWorker1.DoWork, AddressOf BackgoundWorker1_DoWork
AddHandler BackgroundWorker1.RunWorkerCompleted, AddressOf Back_RunWorkerCompleted
AddHandler BackgroundWorker1.ProgressChanged, AddressOf back_ProgressChanged
BackgroundWorker1.RunWorkerAsync()
Private Sub BackgoundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
长时间操作的函数()
End Sub
Me.[进度条].Value = e.ProgressPercentage
Me.Label1.Text = String.Format("加载完成%{0}", e.ProgressPercentage)
End Sub
这样就可以了