天道酬勤

博观而约取,厚积而薄发!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

邮件发送显示进度条的问题

Posted on 2010-04-27 22:35  Happy Coding  阅读(629)  评论(0编辑  收藏  举报
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace ThreadUpdateUI
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                backgroundWorker1.RunWorkerAsync(1000);
            }
            catch (Exception es)
            {

                MessageBox.Show(es.Message);
            }
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker bk=sender as BackgroundWorker;//把serder转化为BackgroundWorker(后台操作)
            int count = (int)(e.Argument);//从 DoWorkEventArgs 参数的 Argument 属性中提取该操作所需的所有参数.并保存起来.
            e.Result = longtime(count, bk, e);//将计算的结果赋给 DoWorkEventArgs 的 Result 属性。
        }
        Random rd = new Random();
        long longtime(int pp,BackgroundWorker bk,DoWorkEventArgs e)
        {
            long time=0;
            int i = 0;
            while (i < pp)
            {
                i++;
                //判断是否取消后台操作
                if (bk.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                else
                {
                    time += i;
                }
                //完成率
                int view = (int)((float)i / pp * 100);
                bk.ReportProgress(view);//已完成后台操作的百分完成率,范围0%-100%
                System.Threading.Thread.Sleep(5);//sleep()里面的数字越少就越快
            }
            return time;
        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                MessageBox.Show("取消");
            }
            else
            {
                MessageBox.Show(e.Result.ToString());
            }
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;//获取异步任务的进度百分比
            label1.Text = e.ProgressPercentage.ToString();//显示出来
        }

        private void button2_Click(object sender, EventArgs e)
        {
            backgroundWorker1.CancelAsync();
        }

    }
}