C#下任务执行“正在执行界面”设计

来源:互联网 发布:济南联通软件研究院 编辑:程序博客网 时间:2024/04/27 14:05

有时候遇到非常耗时的任务最好设计一个好友的界面让程序等待,我从网上查了一下据说backgroundworker和多线程都可以实现我找了一个简单的做法一会再看看backgroundworker把用法也总结一下贴出来方便大家使用!

直接上代码

有两个窗体一个窗体上只有一个button开始执行任务第二个窗体上有进度和当前耗时时间

form1代码:

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 CSharp获取进度{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void Btn_Start_Click(object sender, EventArgs e)        {            Form2 fm = new Form2(0, 100);            fm.Show(this);//设置父窗体            fm.Fuction_SetMessage("任务开始执行");            DateTime dt_Start = DateTime.Now;            for (int i = 1; i <= 100; i++)            {                DateTime dt_Now = DateTime.Now;                TimeSpan ts = dt_Now.Subtract(dt_Start);                fm.Fuction_SetMessage("任务正在执行,当前已用时间"+ts.Hours.ToString()+"小时"+ts.Minutes+"分"+ts.Seconds.ToString()+"秒");                fm.setPos(i);//设置进度条位置                Thread.Sleep(1000);            }            fm.Fuction_SetMessage("任务执行完成!");        }    }}

form2代码:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace CSharp获取进度{    public partial class Form2 : Form    {        public Form2(int _Minimum, int _Maximum)        {            InitializeComponent();            progressBar1.Maximum = _Maximum;//设置范围最大值            progressBar1.Value = progressBar1.Minimum = _Minimum;//设置范围最小值                    }        /// <summary>        /// 设置进度        /// </summary>        /// <param name="value"></param>        public void setPos(int value)        {            if (value < progressBar1.Maximum)            {                progressBar1.Value = value;                label1.Text = (value * 100 / progressBar1.Maximum).ToString() + "%";//显示百分比            }            else if (value == progressBar1.Maximum)            {                progressBar1.Value = value;                label1.Text = (value * 100 / progressBar1.Maximum).ToString() + "%";//显示百分比                                //已经到达百分之百这时候需要关掉百分比窗体切换到主窗体                this.Owner.Enabled = true;                this.Close();                            }            Application.DoEvents();        }        /// <summary>        /// 设置窗体执行状态        /// </summary>        /// <param name="Str_Message"></param>        public void Fuction_SetMessage(string Str_Message)        {            this.Lbl_Message.Text = Str_Message;            Application.DoEvents();        }        private void Form2_Load(object sender, EventArgs e)        {            this.Owner.Enabled = false;        }        private void Form2_FormClosed(object sender, FormClosedEventArgs e)        {            this.Owner.Enabled = true;        }    }}



原创粉丝点击