在进行操作的时候,程序会进入假死状态.数据少的时候还好,数据一多耗时过长很影响使用的体验,所以使用backgroundWorker类,将与数据库相关的耗时较长的操作放在Dowork事件处理程序中,进行操作的时候,用户也通过ProgressChanged和RunWorkerCompleted事件与用户界面进行通信。
- 从工具箱拖取backgroundWorker组件
- 在button的click事件加入RunWorkerAsync
private void button3_Click(object sender, EventArgs e)
{
OracleConnection conn = OracleConn(PublicValue.str);
//调用backgroundWorker1的RunWorkerAsync方法,用来引发DoWork事件
backgroundWorker1.RunWorkerAsync(PublicValue.FilePath1);
- 编辑DoWork事件代码
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//e.Argument为RunWorkerAsync(arg);对应的参数
BackgroundWorker bw = (BackgroundWorker)sender;
String path = e.Argument.ToString();
工作代码
}
- 编辑ProgressChanged事件代码
- 编辑RunWorkerCompleted事件代码
//必须放在Form里否则无法调取
public Form1()
{
InitializeComponent();
//工作线程回调,将要执行的代码放在此函数里
this.backgroundWorker1.DoWork += backgroundWorker1_DoWork;
//当进度改变时回调
this.backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
//当完成时回调
this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
//此属性必须设置,否则读取不到进度
this.backgroundWorker1.WorkerReportsProgress = true;
}