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服务中,就没效果了。

解决方案 »

  1.   

    Service + Timer?
    为什么不直接用Thread来完成呢,即在Service的OnStart的时候,开启子线程,然后完成上面的任务呢。
      

  2.   

    to :Knight94(愚翁) 问题是我的消息队列可能不停的有消息加入,所以我要不停的listen,如果用Service的OnStart,是不是只是在服务启动的时候才listen一下,其他时间就不做了。
    我是要服务启动之后就一直listen消息队列中的消息
      

  3.   

    你在OnStart开启一个线程,其入口函数如下:
    private void ListenFun()
    {
       do
    {
       //Listen your messages and handle them
       ……
       Thread.Sleep( 60000 );
    }
    while( !blnStop );//blnStop is a signal to stop thread}