WinForm中出现窗体未响应,程序锁死解决办法

     这是由于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);
            }

发布了9 篇原创文章 · 获赞 20 · 访问量 8605

猜你喜欢

转载自blog.csdn.net/liuqiao0327/article/details/45391973