这是由于Winform中常常都是拖控件导致的,服务器加载时缓慢。因为如果你的线程多了,那么当两个线程同时尝试将一个控件变为自己需要的状态时,线程的死锁就会发生。但是难道就是因为这个原因,我们就只能让程序卡着么?当然不是,这里教大家一个解决方案:此时应考虑使用异步加载的办法,用BackGroundWorke。
使用方法如下:
1.在工具箱中找到 所有Windows窗体,找到BackGroundWorke,拖于界面上
2.点击事件图标,添加两个事件Dowork和RunWorkerCompleted 如:bgwWork_DoWork和bgwWork_RunWorkerCompleted
3.在bgwWork_DoWork事件中填执行SQL语句的代码,特别注意,此事件中不要出现任何相关于服务器控件的操作,可事先把服务器控件的值赋给参数,然后传参数进来如下:
private void bgwWork_DoWork(object sender, DoWorkEventArgs e)
{
//poNum, startTime, endTime, wuliaoNum, storeName 通过服务器控件赋值后的参数
SMS.OdateBa.oDataOperate od = new SMS.OdateBa.oDataOperate();
tb = od.Re_MM_PO(poNum, startTime, endTime, wuliaoNum, storeName);
}
4.在bgwWork_RunWorkerCompleted进行绑定操作如下:
private void bgwWork_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dgvPInfo.DataSource = tb;
dgvPInfo.Rows[dgvPInfo.Rows.Count - 1].Selected = true;
}
5.调用此异步加载方法
如果是在按钮事件中则如下:
try
{
bgwWork.RunWorkerAsync();//异步调用 此处若反复点击按钮多次会出现 当前正忙,无法同时运行多个任务的异常
}
catch (Exception)
{
MessageBox.Show("正在加载,请稍候!", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}