我在用C#做服务。
我的职责是:
onStart();
copy();
onStop();我在copy()函数中运行onStart()。但是它使服务状态被设置为永久启动,因为copy()函数是一个无限运行的循环(内部有一个Thread.Sleep() ),除非我在任务管理器中完成进程,否则服务是不可停止的。
因此,问题是:
如何让copy()在onStart()的末尾运行,如何使onStart()不再等待copy()的完成
发布于 2016-05-04 12:40:48
您可以从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
}发布于 2016-05-04 12:40:05
您可以使用新的Thread或使用Timer,并在Tick事件中使用迭代的代码。
https://stackoverflow.com/questions/37028090
复制相似问题