using Mesnac.Action.ChemicalWeighing.FreeDb; using System; using System.Threading; namespace Mesnac.Action.ChemicalWeighing { public class LoadingHelper { #region 相关变量定义 /// /// 定义委托进行窗口关闭 /// private delegate void CloseDelegate(); private static Loading loading; private static readonly Object syncLock = new Object(); //加锁使用 #endregion //private LoadingHelper() //{ //} /// /// 显示loading框 /// public static void ShowLoadingScreen() { // Make sure it is only launched once. if (loading != null) return; Thread thread = new Thread(new ThreadStart(LoadingHelper.ShowForm)); thread.IsBackground = true; thread.SetApartmentState(ApartmentState.STA); thread.Start(); } /// /// 显示窗口 /// private static void ShowForm() { if (loading != null) { loading.closeOrder(); loading = null; } loading = new Loading(); loading.TopMost = true; loading.ShowDialog(); } /// /// 关闭窗口 /// public static void CloseForm() { Thread.Sleep(50); //可能到这里线程还未起来,所以进行延时,可以确保线程起来,彻底关闭窗口 if (loading != null) { lock (syncLock) { Thread.Sleep(50); if (loading != null) { Thread.Sleep(50); //通过三次延时,确保可以彻底关闭窗口 loading.Invoke(new CloseDelegate(LoadingHelper.CloseFormInternal)); } } } } /// /// 关闭窗口,委托中使用 /// private static void CloseFormInternal() { loading.closeOrder(); loading = null; } } }