using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace BaseStationTool.Common
{
/// <summary>
/// 消息
/// </summary>
public class MyMessage
{
public volatile object Parameter;
public volatile object father;
public MyMessage(object sender, object Parameter)
{
this.father = sender;
this.Parameter = Parameter;
}
}
/// <summary>
/// 消息队列
/// </summary>
public partial class QueueMessages
{
private volatile ManualResetEvent Event = new ManualResetEvent(false);
private volatile Queue<MyMessage> Messages = new Queue<MyMessage>();
public int Count()
{
return Messages.Count;
}
public void PushMessage(object sender, object obj)
{
MyMessage message = new MyMessage(sender, obj);
Messages.Enqueue(message);
Event.Set();
}
public MyMessage PopMessage()
{
return Messages.Dequeue();
}
public bool waitCommand(int over)
{
if (over != 0)
{
if (Event.WaitOne(over, true))
{
Event.Reset();
return true;
}
else
return false;
}
else
{
Event.WaitOne();
Event.Reset();
return true;
}
}
}
}
/*
用例 消息处理 用后台线程作为处理
在APP类里面 运用
public static volatile QueueMessages QueMessages = new QueueMessages(); /*静态类*/
Thread threadCommand = new Thread(commandThread);
threadCommand.Start();
/// <summary>
/// 后台 线程
/// </summary>
private void commandThread()
{
DateTime timeEnd;
while (true)
{
QueMessages.waitCommand(0);
mutex.WaitOne();
while (QueMessages.Count() != 0)
{
MyMessage message = QueMessages.PopMessage();
string str = message.Parameter.ToString();
Console.WriteLine(message.Parameter.ToString());
switch (message.Parameter.ToString())
{
case "BaseThreeExit": /*模拟防真结束*/
MySetTime.SetSysTime();
main.SimulaFinish();
Console.WriteLine("List remaint =" + FileControl.GetBaseStationNumber());
break;
}
}
}
//发送 消息
App 是主线程 类
App.QueMessages.PushMessage(this, "BaseThreeExit");
App.QueMessages.PushMessage(this, (object)MySetTimeTemp);
*/