带计时器的Windows服务

我已经在c#.net中使用计时器创建了Windows服务。当我在Visual Studio中调试/构建项目时,它工作正常,但安装后不执行其操作。

这可能是什么原因?

代码:

public partial class Service1 : ServiceBase

{

FileStream fs;

StreamWriter m_streamWriter;

Timer tm = new Timer();

public Service1()

{

InitializeComponent();

this.ServiceName = "timerservice";

tm.Interval = 2000;

tm.Tick += new EventHandler(PerformOperations);

tm.Start();

fs = new FileStream(@"c:\mcWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);

m_streamWriter = new StreamWriter(fs);

m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);

}

private void PerformOperations(object sener, EventArgs e)

{

//StreamWriter swr = new StreamWriter("c:\\test_from_database.txt",true);

try

{

OdbcConnection con = new OdbcConnection("DSN=liquor_data");

OdbcDataAdapter adp = new OdbcDataAdapter("", con);

DataSet ds = new DataSet();

string sql = "select * from item_group";

adp.SelectCommand.CommandText = sql;

adp.Fill(ds, "item_group");

foreach (DataRow dr in ds.Tables["item_group"].Rows)

{

// swr.Write(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");

//Console.WriteLine(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");

m_streamWriter.WriteLine(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");

}

m_streamWriter.Flush();

}

catch (Exception ex)

{

// swr.Write("Error :"+ ex.Message + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n"); }

}

}

}

回答:

Windows Service的第一种方法并不容易。

很久以前,我写了一个C#服务。

这是Service类的逻辑(经过测试,可以正常工作):

namespace MyServiceApp

{

public class MyService : ServiceBase

{

private System.Timers.Timer timer;

protected override void OnStart(string[] args)

{

this.timer = new System.Timers.Timer(30000D); // 30000 milliseconds = 30 seconds

this.timer.AutoReset = true;

this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer_Elapsed);

this.timer.Start();

}

protected override void OnStop()

{

this.timer.Stop();

this.timer = null;

}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)

{

MyServiceApp.ServiceWork.Main(); // my separate static method for do work

}

public MyService()

{

this.ServiceName = "MyService";

}

// service entry point

static void Main()

{

System.ServiceProcess.ServiceBase.Run(new MyService());

}

}

}

我建议您使用单独的静态方法(而不是在控制台应用程序中…直接添加对它的引用)编写您的实际服务工作,以简化调试和清理服务代码。

确保间隔足够,并仅在OnStart和OnStop替代中写入日志。

希望这可以帮助!

以上是 带计时器的Windows服务 的全部内容, 来源链接: utcz.com/qa/411267.html

回到顶部