有人可以让我知道如何从Windows服务(在C#中)运行一个长时间运行的进程吗?这个过程可能需要数小时才能完成。服务应检查数据库中是否有要执行的待处理作业。每项工作都需要很长时间才能完成。如果没有待处理的作业,那么它应该睡2分钟(可配置)然后重新开始。我怎么能用Windows服务呢?提前谢谢。
答案 0 :(得分:3)
你必须创建像这样的控制台应用程序
static void Main(string[] args)
{
bool createdNew;
Mutex m = new Mutex(true, "YourBatchProcessor", out createdNew);
if (!createdNew)
{
Console.WriteLine("YourBatchProcesso is already running!");
return;
}
//your code goes here
}
并且正如Gmoliv所说创建计划任务而不是每2分钟运行一次
或者如果您想编写窗口服务,那么您的服务代码就像
public class YourServrClass
{
private int numticks = 0;
private Timer _timer;
private bool _IsStarted;
private int Interval =2000; //ticks //2 sec.
#region Initializer
public YourServrClass()
{
InitializeComponent();
_timer = new Timer();
_timer.Interval = Interval;
_timer.Elapsed += new ElapsedEventHandler(this.Timer_Tick);
}
#endregion
#region Timer_Tick to process
private void Timer_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
numticks++;
if (_IsStarted)
{
_timer.Stop();
//your code //ProcessYourData();
_timer.Start();
}
}
#endregion
protected override void OnStart(string[] args)
{
_IsStarted=true;
}
protected override void OnStop()
{
_IsStarted=false;
}
}
答案 1 :(得分:1)
我一直在写服务,所以请随时问我后续问题。
答案 2 :(得分:0)
没有特别的技巧,除了你不能使用任何GUI / Forms或用户输入。根据定义,Windows服务没有用户I / O.将错误写入事件日志,你没事。
答案 3 :(得分:0)
使用Windows计划任务要比开发自己的应用程序容易得多,你应该试一试。
如果它没有按你期望的方式工作,正如杰伊所说,没有诀窍,只记得没有GUI。