c#联系关系进度条

c#关联进度条
我写好了一个Winform窗体小程序,因为在程序处理数据计算的时候需要一段时间,为了显示程序还在运行状态,不让用户以为程序没反应,所以希望用一个进度条显示程序运行的进度,当点击运行按钮的时候,就可以关联起来显示进度,我在网上找到了如下代码,代码本身没有错误,但我要怎么把我的代码和如下代码关联呢?应该在哪里调用呢?[code=csharp private void button1_Click(object sender, EventArgs e)
        {
            this.backgroundWorker1.RunWorkerAsync(); // 运行 backgroundWorker 组件

            ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体
            form.ShowDialog(this);
            form.Close();
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                MessageBox.Show(e.Error.Message);
            }
            else if (e.Cancelled)
            {
            }
            else
            {
            }
            
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {

             BackgroundWorker worker = sender as BackgroundWorker;
            for (int i = 0; i < 100; i++)
            {
                Thread.Sleep(1000);
                worker.ReportProgress(i, i.ToString()); //注意:这里向子窗体返回信息值,这里是两个值,一个用于进度条,一个用于文本框的。
                if (worker.CancellationPending)  // 如果用户取消则跳出处理数据代码
                {
                    e.Cancel = true;
                    break;
                }
            }   
        }
 private BackgroundWorker backgroundWorker1; //ProcessForm 窗体事件(进度条窗体)
        public ProcessForm(BackgroundWorker backgroundWorker1)
        {
            InitializeComponent();

            this.backgroundWorker1 = backgroundWorker1;
            this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
            this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
        }
        void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.Close();//执行完之后,直接关闭页面
        }
        void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1.Value = e.ProgressPercentage;
            this.textBox1.AppendText(e.UserState.ToString());//主窗体传过来的值,通过e.UserState.ToString()来接受
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.backgroundWorker1.CancelAsync();
            this.button1.Enabled = false;
            this.Close();
        }
        }


       ][/code]
------解决思路----------------------
你的进度内容写在这个backgroundWorker1_DoWork方法里,  循环100次的更新进度条换成你的程序处理数据更新进度条就行了
------解决思路----------------------
我的代码

-》 一般放在DoWork方法中,谁知道你的代码是什么功能。
------解决思路----------------------
引用:
我写好了一个Winform窗体小程序,因为在程序处理数据计算的时候需要一段时间,为了显示程序还在运行状态,不让用户以为程序没反应,所以希望用一个进度条显示程序运行的进度,当点击运行按钮的时候,就可以关联起来显示进度,我在网上找到了如下代码,代码本身没有错误,但我要怎么把我的代码和如下代码关联呢?应该在哪里调用呢?[code=csharp private void button1_Click(object sender, EventArgs e)
        {
            this.backgroundWorker1.RunWorkerAsync(); // 运行 backgroundWorker 组件

            ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体
            form.ShowDialog(this);
            form.Close();
        }
       ][/code]


不用往下看,但看这里的思路,就知道你的问题出在哪里,这种问题会产生多么诡异的结果。

当你显示一个“进度条窗体”,它就是来显示的,你在这里又显示、又阻塞、又关闭,这是干什么呢?只有同步顺序的思路,没有学会异步的思路,那么就完蛋了,写不出一个合适的并发多线程程序。

要显示一个窗体就显示,然后这个工作就完毕了。至于说进度条走到了100%之后,进度窗体捕获了这个事件发生的通知而关闭了自己,那是另外一个工作。这两个东西如果阻塞、同步地去设计在一起,那么你的脑袋还能容得下多少事情?

一些自认为挺能追求时髦的“并发、线程”概念的人,如果头脑中还是只有写一个简单的数学计算函数式的同步编程习惯,那么很快就会疯掉的。因为他们的脑容量实在是塞不下着太多的“死循环、阻塞、等待”的大量干扰。

这种设计思路从根本上,就是文盲。需要正规地学习异步、高并发的程序设计思路。注意是“设计”,而跟特定编程语言的无关。
------解决思路----------------------
想搞明白如何比较科学地设计并发程序,那么就从把代码
            ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体
            form.ShowDialog(this);
            form.Close();
改为
            ProcessForm form = new ProcessForm(this.backgroundWorker1);// 显示进度条窗体
            form.Show();
开始吧。

应该先在纸上把流程图画出来,你画出来的流程图应该能反映出异步流程程序跟同步程序的区别。跟编程语言具体代码无关,你应该先学绘画流程图。
------解决思路----------------------
http://blog.****.net/jiankunking/article/details/45642597
可以试试这个