我正在C#中开发一个.Net Compact框架应用程序,该应用程序使用设备上安装的一些第三方消息队列软件。.Net CF运行线程用于应用程序的生命周期
我是相当新的这个环境,并想知道如果我能运行架构过去的一些聪明的眼睛的几个关键概念,看看我在正确的轨道或者它如何可以改善上。
虽然我的应用程序运行时我需要保持消息队列在后台运行库,以便它可以提高的通知,并告知我任何传入的消息,我的应用程序生成处理消息的应用。它需要在我的应用程序的整个生命周期中运行,所以我认为最好的方法是在我的应用程序启动时在自己的线程中运行它。
我不想淹没了这则讯息代码,所以我已经把我上认为重要的部分,请让我知道如果我需要澄清更多。
我启动消息过程在单独的线程在应用程序启动这样,
[MTAThread]
static void Main()
{
//Run the message processor in its own thread
Thread messagingThread = new Thread(new ThreadStart(msgProcessorStart));
messagingThread.Priority = ThreadPriority.Highest;
messagingThread.Start();
…..
Application.Run(splashForm);
}
private static void msgProcessorStart()
{
MessageProcessor.Start();
}
的MessageProcessor的是外观在消息库来简化相互作用,并保持它的一个实例。我已经在下面发布了部分内容,它会针对未收到的邮件提出事件并通知收到邮件的时间。
public static class MessageProcessor
{
#region Declarations
//private static reference to the MessageProvider as specified in the configuration files.
private static readonly IMessageProcessor _messageProcessor = MessageAccess.MessageProvider;
#endregion
#region Constructor
/// <summary>
/// Static constructor, connects to the events on the messageProcessor instance which
/// relate to messages received, notifications received and exceptions raised.
/// </summary>
static MessageProcessor()
{
//Connect up events specifed on the IMessageProcessor interface.
_messageProcessor.MessageReceived += messageReceived;
}
#endregion
#region Public Methods
/// <summary>
/// Sends a request based data message.
/// </summary>
/// <typeparam name="T">Message which implements RequestBase</typeparam>
/// <param name="message">The message to send</param>
public static void SendMessage<T>(T message) where T : RequestBase
{
_messageProcessor.SendMessage(message);
}
/// <summary>
/// Starts the Message Processor.
/// </summary>
/// <returns>bool, true if started successfully.</returns>
public static void Start()
{
_messageProcessor.Start();
}
#endregion
#region Private methods
//Registered listener of the IMessageProcessor.MessageReceived event
private static void messageReceived(object sender, MsgEventArgs<IMessage> message)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(processMessage),(object)message.Value);
}
//Invoked via messageReceived.
private static void processMessage(object msg)
{
//process the message
}
#endregion
}
Start方法首先被调用并建立一个会话;我们将开始收到通知并能够发送消息。
当接收到消息时我目前管理经由线程池一个单独的线程事件处理中,为了继续和其他通知和响应消息。
这是否看起来合理的做法,将其确保我的消息队列库将能够从我的应用程序隔离处理?
任何意见将感激地收到,感谢您的时间。