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