在onStart外运行循环

时间:2016-05-04 12:37:53

标签: c# service

我正在用C#做服务。

我有以下功能:

onStart();
copy();
onStop();

我在copy()函数中运行onStart()。但它正在使服务状态永远设置为开始,因为copy()函数是一个无限运行的循环(里面有Thread.Sleep()),使服务不可阻挡,除非我在任务管理器中完成过程。

所以,问题是:

如何在copy()结束时运行onStart()并让onStart()不等待copy()完成?

2 个答案:

答案 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事件中使用迭代代码。