进度条开始和停止按钮单击使用线程

coo*_*run 0 c# progress-bar

我已经创建了一个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
好运:)