private void InitializeComponent()
{
this.timer1 = new System.Timers.Timer();
this.messageQueue1 = new System.Messaging.MessageQueue();
this.messageQueue1.Path=@".\private$\MyNewQueue";
((System.ComponentModel.ISupportInitialize)(this.timer1)).BeginInit();
this.timer1.Enabled = true;
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
this.ServiceName = "Service1";
((System.ComponentModel.ISupportInitialize)(this.timer1)).EndInit();
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
System.Messaging.Message ms=new System.Messaging.Message();
string[] types = { "System.String" };
((XmlMessageFormatter)messageQueue1.Formatter).TargetTypeNames = types;
ms=messageQueue1.Receive();
string label=(string)(ms.Label);
string body=(string)(ms.Body); FileStream fs = new FileStream(@"d:\3.txt" , FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.WriteLine(DateTime.Now.ToString()+"|||"+label+"|||"+body+"\n");
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}我去掉timer1_Elapsed中接受消息的代码,测试正确,写入时间。同时我把接受消息的代码放到winform中可以正确执行。
但是一起放到windows服务中,就没效果了。
{
this.timer1 = new System.Timers.Timer();
this.messageQueue1 = new System.Messaging.MessageQueue();
this.messageQueue1.Path=@".\private$\MyNewQueue";
((System.ComponentModel.ISupportInitialize)(this.timer1)).BeginInit();
this.timer1.Enabled = true;
this.timer1.Elapsed += new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
this.ServiceName = "Service1";
((System.ComponentModel.ISupportInitialize)(this.timer1)).EndInit();
}
private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
System.Messaging.Message ms=new System.Messaging.Message();
string[] types = { "System.String" };
((XmlMessageFormatter)messageQueue1.Formatter).TargetTypeNames = types;
ms=messageQueue1.Receive();
string label=(string)(ms.Label);
string body=(string)(ms.Body); FileStream fs = new FileStream(@"d:\3.txt" , FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.WriteLine(DateTime.Now.ToString()+"|||"+label+"|||"+body+"\n");
m_streamWriter.Flush();
m_streamWriter.Close();
fs.Close();
}我去掉timer1_Elapsed中接受消息的代码,测试正确,写入时间。同时我把接受消息的代码放到winform中可以正确执行。
但是一起放到windows服务中,就没效果了。
为什么不直接用Thread来完成呢,即在Service的OnStart的时候,开启子线程,然后完成上面的任务呢。
我是要服务启动之后就一直listen消息队列中的消息
private void ListenFun()
{
do
{
//Listen your messages and handle them
……
Thread.Sleep( 60000 );
}
while( !blnStop );//blnStop is a signal to stop thread}