using System;
using System.Threading;
namespace Rattan.ERP.TMS.Services.EOP
{
/// <summary>
/// 單線程隊列,建立 EOP 訂單
/// </summary>
public class ThreadCreateEopOrder
{
#region 單例模式
private ThreadCreateEopOrder()
{
}
/// <summary>
/// 線程安全鎖
/// </summary>
private static readonly object m_lock = new object();
private volatile static ThreadCreateEopOrder m_instance = null;
/// <summary>
/// 執行個體化 ThreadCreateEopOrder 對象
/// </summary>
/// <returns></returns>
public static ThreadCreateEopOrder CreateInstance()
{
if (m_instance == null)
{
lock (m_lock)
{
if (m_instance == null)
m_instance = new ThreadCreateEopOrder();
}
}
return m_instance;
}
#endregion
#region 枚舉
/// <summary>
/// 枚舉
/// </summary>
public enum EnumState
{
/// <summary>
/// 未開始
/// </summary>
None = 0,
/// <summary>
/// 開始
/// </summary>
Start = 1,
/// <summary>
/// 正在執行
/// </summary>
Doing = 2,
/// <summary>
/// 執行完畢
/// </summary>
End = 3,
}
private volatile static EnumState m_state = EnumState.None;
/// <summary>
/// 執行狀态
/// </summary>
public static EnumState State
{
get { return m_state; }
//set { m_State = value; }
}
#endregion
/// <summary>
/// 線程
/// </summary>
private Thread m_thread = null;
/// <summary>
/// 開啟一個程序
/// </summary>
public void RunWork()
{
//確定臨界區被一個Thread所占用
lock (m_lock)
{
if (State == EnumState.None || State == EnumState.End)
{
//初始化線程
m_thread = new Thread(new ThreadStart(DoWork))
{
Name = "建立 EOP 訂單線程"
};
m_thread.Start();
//WorkFromDate = DateTime.Now;
m_state = EnumState.Start;
}
}
}
/// <summary>
/// 處理消息隊列中的資料
/// </summary>
private void DoWork()
{
try
{
m_state = EnumState.Doing;
#region 需要執行的主要程式代碼
CreateEopOrder eopOrder = new CreateEopOrder();
eopOrder.Start();
#endregion
}
catch (Exception ex)
{
Grass.Log.ExceptionsStack.RegisterError(ex);
}
finally
{
m_state = EnumState.End;
}
}
}
}