3D效果之类的。其实像这个进度条设置一下MasterValue和Value就可以在设计的时候看出它其实是二个进度条的组合了。这里MasterPainter和ProgressPainter要设置成2个不一样的ProgressPainter,至少要颜色不一样才能看得到是二个在同时滚动嘛。
1)在Form1上布置一个PorgressBar,名称progressBar1
2)在Form1上布置一个Button,名称:button1, Text:导入
3)在Form1上布置一个Button,名称:button2, Text:取消导入
4)在Form1上布置一个BackgroundWorker,名称:backgroundWorker1
5)在Form1上布置一个Label,名称:label1
using Systemusing System.Collections.Generic
using System.ComponentModel
using System.Data
using System.Drawing
using System.Linq
using System.Text
using System.Windows.Forms
using System.IO
namespace WinFormBackgroundWorker
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent()
//设置 backgroundWorker1
//允许报告后台处理进度
backgroundWorker1.WorkerReportsProgress = true
//运行取消后台执行
backgroundWorker1.WorkerSupportsCancellation = true
//事件
backgroundWorker1.DoWork += backgroundWorker1_DoWork
backgroundWorker1.RunWorkerCompleted +=
backgroundWorker1_RunWorkerCompleted
backgroundWorker1.ProgressChanged +=
backgroundWorker1_ProgressChanged
//progressBar1
progressBar1.Maximum = 100
//按钮
button1.Enabled = true
button2.Enabled = false
//lable1
label1.Text=string.Empty
}
void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage
label1.Text = (string)e.UserState
}
void backgroundWorker1_RunWorkerCompleted(object sender,
RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
label1.Text = "任务取消!"
progressBar1.Value = 0
}
else
{
label1.Text = "任务完成!"
}
button1.Enabled = true
button2.Enabled = false
}
void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs e)
{
//获取文件夹中文件信息
string[] files = Directory.GetFiles(@".")
int i = 0
foreach (var fs in files)
{
// 如果后台 *** 作处理过程中,用户按下取消键
if (backgroundWorker1.CancellationPending)
{
//停止后台处理
e.Cancel = true
break
}
i++
string msg = "正在处理:" + fs
backgroundWorker1.ReportProgress(i *100 /files.Length, msg)
//用一个Sleeep,模拟处理文件的长耗时过程
System.Threading.Thread.Sleep(2000)
}
}
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false
button2.Enabled = true
//异步启动后台任务(多线程方式)
backgroundWorker1.RunWorkerAsync()
}
private void button2_Click(object sender, EventArgs e)
{
//取消后台 *** 作执行
backgroundWorker1.CancelAsync()
}
}
}
单线程程序: 开始加载datatable数据前创建FrmWait 加载完后关闭。
//判断是否存在该窗口FrmWait newFrmWait = new FrmWait()
bool IsExist =False
foreach (Form f in Application.OpenForms)
{
if (f.GetType() == typeof(FrmWait))
{
IsExist =trune
// 这里添加处理 关闭??
break
}
}
//如果等待界面不存在 启动等待界面
if(!IsExist)
{
newFrmWait.ShowDialog()
}
//这里加载datatable
foreach (Form f in Application.OpenForms)
{
if (f.GetType() == typeof(FrmWait))
{
//关闭等待界面
f.Close()
break
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)