我在Windows窗体中使用进度条时遇到了一些问题。假设我有一个算法,其中包含十个按钮点击的部分。在每个部分之后,我想要将表单上的进度条更新到10%。但是,当代码运行时,Windows窗体将不会响应或更新。
在代码运行时,表单上的正确显示进度是什么?
答案 0 :(得分:4)
您需要使用BackgroundWorker
这里有一个很好的例子:http://www.dotnetperls.com/progressbar
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, System.EventArgs e)
{
// Start the BackgroundWorker.
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
// Wait 100 milliseconds.
Thread.Sleep(100);
// Report progress.
backgroundWorker1.ReportProgress(i);
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// Change the value of the ProgressBar to the BackgroundWorker progress.
progressBar1.Value = e.ProgressPercentage;
// Set the text.
this.Text = e.ProgressPercentage.ToString();
}
}
}
或者您可以使用以下内容:
private void StartButtonClick(object sender, EventArgs e)
{
var t1 = new Thread(() => ProgressBar(value));
t1.Start();
}
private void ProgressBar(value1)
{
ProgressBar.BeginInvoke(new MethodInvoker(delegate
{
ProgresBar.Value++
}));
}
答案 1 :(得分:0)
我建议使用TPL进行更标准化,轻量化,强大和可扩展的操作 请参见:http://blogs.msdn.com/b/pfxteam/archive/2010/10/15/10076552.aspx