前言:使用winform觸發一個事件後執行的代碼,若是耗時很是長,則會致使窗口界面假死! 本人最近經過winform窗體執行一項:須要批量更新一批數據庫的數據的操做的任務時,因爲數據量達到百萬級別,很是耗時,只能慢慢更新,慢慢執行。 數據庫
可是,在執行的過程遇到了一個奇葩的問題:窗體在調試狀態下,代碼能夠慢慢循環執行,沒出現異常。 可是我單獨運行EXE程序時,就必現:程序假死,未響應狀態。 異步
後臺百度雖然沒有找到直接的答案,可是也發現了緣由:是由於在操做很是耗時時,程序會出現假死,解決方法也很簡單:在你的耗時方法裏,加上異步處理,不要讓程序一直等待你的執行結果。this
以下代碼:spa
經過,異步Task.Run方法,讓方法快速結束,不用登臺中間即爲耗時的操做更新過程,經過這樣改造後,界面不再卡死了,完美解決。調試
/// <summary> /// 臨時方法-用於刷用戶地址手機號數據 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpdateUserAddressPhone_Click(object sender, EventArgs e) { this.txtActionInfomation.Text = $"方法開始"; this.txtActionInfomation.Update(); Task.Run(() => { //耗時代碼 do { //個人更新代碼,須要分頁獲取並更新數據庫,耗時長 //... //... this.txtActionInfomation.Text = $"已更新X條數據"; this.txtActionInfomation.Update(); } while (true); }); this.txtActionInfomation.Text = $"方法結束"; this.txtActionInfomation.Update(); }