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);
            }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章