最近在做一個項目,需要用到等待窗體,在DevExpress下面有SplashScreen控件可以使用,同時也有ProgressIndicator控件能用,但是如果沒有用Dev開發的話,我們就需要自定義一個等待窗體了。
本項目開放源代碼,下載地址見本文末尾(如果本程序有幫助到您,希望留言評論,感謝)
VS環境:vs2017,低版本環境可以使用VS Convert轉換工具進行版本轉換,或者直接看源代碼,復制到新項目中也可以。
首先,把截圖放上來:(界面沒有優化)
多功能Loading中,實現了實時顯示執行進度的功能,該功能也可以改進為用進度條顯示。
實現的功能比較簡單,就是在程序處理 一些耗時比較多的代碼時,將Loading窗體展示給用戶,並在后台執行耗時操作,這樣能夠給用戶較好的體驗。
核心代碼是我自己寫的一個SplashScreenManager類:有2個方法:1、ShowLoading()2、CloseLoading()
調用方法舉例:
//實例化一個窗口,窗口需要自己定義哦 SimpleLoading loadingfrm = new SimpleLoading(this); //將Loaing窗口,注入到 SplashScreenManager 來管理 GF2Koder.SplashScreenManager loading = new GF2Koder.SplashScreenManager(loadingfrm); loading.ShowLoading(); //try catch 包起來,進行異常處理 try { //模擬耗時操作 for (int i = 0; i < 20; i++) { Thread.Sleep(100); } } catch (Exception) { /*可選處理異常*/ } finally { loading.CloseWaitForm(); }
需要顯示進度的話,舉例:
public static bool flag = true; private void button2_Click(object sender, EventArgs e) { flag = true;//flag 為false時候,退出執行耗時操作 MultiFuncLoading loadingfrm = new MultiFuncLoading(this); // 將Loaing窗口,注入到 SplashScreenManager 來管理 GF2Koder.SplashScreenManager loading = new GF2Koder.SplashScreenManager(loadingfrm); loading.ShowLoading(); // 設置loadingfrm操作必須在調用ShowLoading之后執行 loadingfrm.SetTxt("多功能Loaidng界面", "拼命加載中...客官耐心等待", "Please Waitting..."); // try catch 包起來,進行異常處理 try { //模擬耗時操作 for (int i = 0; i < 100; i++) { Thread.Sleep(100); loadingfrm.SetJD("當前:"+i+"/總計:100","當前進度:"+i); if (!flag) { break;/*用戶點擊取消執行后,跳出循環*/ } } } catch (Exception) { /*可選處理異常*/ } finally { loading.CloseWaitForm(); } }
附錄:
這個程序的第一個版本參考了 網名為 “八哥” 的一個程序,當時我在群里面的時候,感謝他的熱情幫助。
現將我的代碼貼出來吧,里面用的了委托的概念。大家如果不懂的話,可以百度一下,這里給出幾個鏈接:
http://blog.csdn.net/ggz631047367/article/details/44646233
http://www.runoob.com/csharp/csharp-delegate.html
http://blog.csdn.net/sjj2011/article/details/7835200
http://blog.csdn.net/testcs_dn/article/details/37671513
另外附上下載鏈接:V1.0 不支持下載 (該版本有BUG,線程在init函數中調用的,可能會出現卡頓,請下載V2版本)
V2版本下載地址:V2.0下載(新建進程執行耗時操作,該版本不再提供下載)
V3版本下載地址:V3.0下載(主進程執行耗時操作)