首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在onStart外部运行循环

在onStart外部运行循环
EN

Stack Overflow用户
提问于 2016-05-04 12:37:53
回答 2查看 137关注 0票数 1

我在用C#做服务。

我的职责是:

代码语言:javascript
复制
onStart();
copy();
onStop();

我在copy()函数中运行onStart()。但是它使服务状态被设置为永久启动,因为copy()函数是一个无限运行的循环(内部有一个Thread.Sleep() ),除非我在任务管理器中完成进程,否则服务是不可停止的。

因此,问题是:

如何让copy()onStart()的末尾运行,如何使onStart()不再等待copy()的完成

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-04 12:40:48

您可以从OnStart启动新线程,以便您的服务返回控制返回服务控制器。

代码语言:javascript
复制
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中启动并保持服务运行的计时器。

代码语言:javascript
复制
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  
 }
票数 2
EN

Stack Overflow用户

发布于 2016-05-04 12:40:05

您可以使用新的Thread或使用Timer,并在Tick事件中使用迭代的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37028090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档