我已经创建了一个C#windows应用程序,我插入了进度条.
单击一个按钮时,应显示进度条,然后它应该启动该过程大约2到3秒,当进程条完成时,它应该被隐藏.
我已经使用此代码来解决这个问题,但它无法正常工作.
当进度条运行时,标签框应该像"生成... 45%"并且在完成标签框之后应该是"生成100%..",但是当我插入标签时它会显示一些错误.
这是单击Generate按钮之前的图片..

在处理我应该得到这样的..

在最终进程ID应该像这样,进度条应该隐藏..

ProgressBar1.Visible = true;
if (isProcessRunning)
{
MessageBox.Show("A process is already running.");
return;
}
Thread backgroundThread = new Thread(
new ThreadStart(() =>
{
isProcessRunning = true;
for (int n = 0; n < 100; n++)
{
Thread.Sleep(1);
progressBar1.BeginInvoke(new Action(() => progressBar1.Value = n));
}
MessageBox.Show("Generated!!!");
if (progressBar1.InvokeRequired)
progressBar1.BeginInvoke(new Action(() => progressBar1.Value = 0));
isProcessRunning = false;
}
));
// Start the background process thread
backgroundThread.Start();
Run Code Online (Sandbox Code Playgroud)
zey*_*zey 11
我建议你用BackgroundWorkerC#winform显示进度条.
这是一个例子,
public partial class Form1 : Form
{
BackgroundWorker bgw = new BackgroundWorker();
public Form1()
{
InitializeComponent();
label1.Text = "";
label2.Text = "";
}
private void button1_Click_1(object sender, EventArgs e)
{
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.ProgressChanged += new ProgressChangedEventHandler(bgw_ProgressChanged);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
bgw.WorkerReportsProgress = true;
bgw.RunWorkerAsync();
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
int total = 57; //some number (this is your variable to change)!!
for (int i = 0; i <= total; i++) //some number (total)
{
System.Threading.Thread.Sleep(100);
int percents = (i * 100) / total;
bgw.ReportProgress(percents, i);
//2 arguments:
//1. procenteges (from 0 t0 100) - i do a calcumation
//2. some current value!
}
}
void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label1.Text = String.Format("Progress: {0} %", e.ProgressPercentage);
label2.Text = String.Format("Total items transfered: {0}", e.UserState);
}
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//do the code when bgv completes its work
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将进度条的可见设置为false bgw_RunWorkerCompleted.
以下链接将显示如何使用backgroundworker
DotNetPerls
MSDN参考
CodeProject
好运:)