WinForm實現Loading等待界面 1,LoaderForm窗體中添加PictureBox,然后添加Loading圖片

2,窗體內屬性設置 StartPosition :CenterScreen在屏幕中心顯示 TopMost:True置頂顯示 ShowInTaskbar:False不在任務欄顯示 FormBorderStyle:None不顯示窗體邊框和標題欄 TransparencyKey:Control顏色為Control的部分透明 BackColor:Control窗體背景顏色設為Control 3,調用: LoadingHelper.ShowLoadingScreen();//顯示 LoadingHelper.CloseForm();//關閉 4,顯示效果如下:

5,LoaderForm和LoadingHelper部分代碼如下,ref:https://www.cnblogs.com/morewindows0/p/7107599.html LoaderForm: public partial class LoaderForm : Form { public LoaderForm() { InitializeComponent(); } /// <summary> /// 關閉命令 /// </summary> public void closeOrder() { if (this.InvokeRequired) { //這里利用委托進行窗體的操作,避免跨線程調用時拋異常,后面給出具體定義 CONSTANTDEFINE.SetUISomeInfo UIinfo = new CONSTANTDEFINE.SetUISomeInfo(new Action(() => { while (!this.IsHandleCreated) { ; } if (this.IsDisposed) return; if (!this.IsDisposed) { this.Dispose(); } })); this.Invoke(UIinfo); } else { if (this.IsDisposed) return; if (!this.IsDisposed) { this.Dispose(); } } } private void LoaderForm_FormClosing(object sender, FormClosingEventArgs e) { if (!this.IsDisposed) { this.Dispose(true); } } } class CONSTANTDEFINE { public delegate void SetUISomeInfo(); } LoadingHelper: public class LoadingHelper { #region 相關變量定義 /// <summary> /// 定義委托進行窗口關閉 /// </summary> private delegate void CloseDelegate(); private static LoaderForm loadingForm; private static readonly Object syncLock = new Object(); //加鎖使用 #endregion //private LoadingHelper() //{ //} /// <summary> /// 顯示loading框 /// </summary> public static void ShowLoadingScreen() { // Make sure it is only launched once. if (loadingForm != null) return; Thread thread = new Thread(new ThreadStart(LoadingHelper.ShowForm)); thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start(); } /// <summary> /// 顯示窗口 /// </summary> private static void ShowForm() { if (loadingForm != null) { loadingForm.closeOrder(); loadingForm = null; } loadingForm = new LoaderForm(); loadingForm.TopMost = true; loadingForm.ShowDialog(); } /// <summary> /// 關閉窗口 /// </summary> public static void CloseForm() { Thread.Sleep(50); //可能到這里線程還未起來,所以進行延時,可以確保線程起來,徹底關閉窗口 if (loadingForm != null) { lock (syncLock) { Thread.Sleep(50); if (loadingForm != null) { Thread.Sleep(50); //通過三次延時,確保可以徹底關閉窗口 loadingForm.Invoke(new CloseDelegate(LoadingHelper.CloseFormInternal)); } } } } /// <summary> /// 關閉窗口,委托中使用 /// </summary> private static void CloseFormInternal() { loadingForm.closeOrder(); loadingForm = null; } }