我正在用C#做服务。
我有以下功能:
onStart();
copy();
onStop();
我在copy()
函数中运行onStart()
。但它正在使服务状态永远设置为开始,因为copy()
函数是一个无限运行的循环(里面有Thread.Sleep()
),使服务不可阻挡,除非我在任务管理器中完成过程。
所以,问题是:
如何在copy()
结束时运行onStart()
并让onStart()
不等待copy()
完成?
答案 0 :(得分:2)
您可以从OnStart启动新线程,以便您的服务返回控制回服务控制器。
protected override void OnStart(string[] args)
{
Thread MyThread = new Thread(new ThreadStart(Starter));
MyThread.Start();
base.OnStart(args);
}
private void Starter()
{
//Add your long running code here
}
您还可以使用将在OnStart中启动的计时器,并使您的服务保持运行。
private System.Timers.Timer timer;
protected override void OnStart(string[] args)
{
this.timer = new System.Timers.Timer(3000); // 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)
{
//Your code goes here
}
答案 1 :(得分:0)
您可以使用新Thread
或使用Timer
,并在Tick
事件中使用迭代代码。