using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace HF_XiaoC.Web.SysManage.Log.Operation {
public class Log_Operation
{
private static Log_Operation _log;
private static Queue<HF_XiaoC.Model.Log_Operation> _log_queue;
private Semaphore _semaphore;
/// <summary>
/// 构造函数
/// </summary>
public Log_Operation() {
Init();
}
public static Log_Operation Log {
get { return _log ?? (_log = new Log_Operation()); }
}
public void Init() {
_log_queue = new Queue<HF_XiaoC.Model.Log_Operation>();
Thread thread = new Thread(new ThreadStart(Work)) { IsBackground = true};
_semaphore = new Semaphore(2, 2);
thread.Start();
}
public void Work() {
while (true) {
if (_log_queue.Count > 0) {
WriteMessage();
}
}
}
public void WriteMessage() {
HF_XiaoC.Model.Log_Operation logMessage;
lock (_log_queue) {
logMessage = _log_queue.Dequeue();
}
if (logMessage != null) {
HF_XiaoC.BLL.Log_Operation bll_Operation = new HF_XiaoC.BLL.Log_Operation();
bll_Operation.Insert(logMessage);
}
}
public void EnQueueModel(HF_XiaoC.Model.Log_Operation model) {
_semaphore.WaitOne();
if (model != null) {
lock (_log_queue) {
_log_queue.Enqueue(model);
_semaphore.Release();
}
}
}
}
}
----------------使用-------------------
HF_XiaoC.Model.Log_Operation model_log_oper = new HF_XiaoC.Model.Log_Operation();
model_log_oper.OpDate = DateTime.Now;
Log_Operation.Log.EnQueueModel(model_log_oper);