我用的异步调用来做的,很简单
private void FormSelect_Load(object sender, System.EventArgs e)
{
this.DoUpData(); //启动时要处理的事务
}
private void DoUpData()
{
UpDateDelegate ud=new UpDateDelegate(this.UpdateData);//使用代理的异步调用避免界面死锁
System.AsyncCallback ac=new AsyncCallback(this.Callback);
//未准备好之前让功能按钮不能用
this.label1.Visible=true;
this.dateTimePicker1.Enabled=false;
this.dateTimePicker2.Enabled=false;
this.progressBar1.Value=0;
this.progressBar1.Visible=true;
this.timer1.Enabled=true;
this.button1.Enabled=false;
this.button3.Enabled=false;
ud.BeginInvoke(ac,null);//开始异步调用处理事务,其实就是多线程
}
private delegate void UpDateDelegate();
private void Callback(System.IAsyncResult ia)//事务处理结束后的回调函数,开启功能按钮
{
this.label1.Visible=false;
this.progressBar1.Visible=false;
this.dateTimePicker1.Enabled=true;
this.dateTimePicker2.Enabled=true;
this.button1.Enabled=true;
this.button3.Enabled=true;
this.timer1.Enabled=false;
}
引文来源 关于窗口重绘的问题(c#,framework) .NET技术 / .NET Framework – CSDN社区 community.csdn.net