【问题标题】:Stop program when thread finished [duplicate]线程完成时停止程序[重复]
【发布时间】:2013-08-16 04:39:07
【问题描述】:

我是 C# 的新手。我有一个 Windows 服务。在这个服务中,我运行一个线程。我想在线程完成后立即停止服务。目前,我的代码是这样的:

while(true){
     if(isThreadFinished){
          MyService.Stop();
          break;
     }
}

它有效,但我觉得像这样使用 while(true) 是一种愚蠢的方式。所以,我想知道是否有其他方法可以实现我的要求。

【问题讨论】:

  • 是什么让你觉得这是一种愚蠢的方式?
  • @Shane.C 因为这样 CPU 使用率会无缘无故地飙升。
  • 这不是一个愚蠢的方式,但它会涉及大量处理,您可能希望使用计时器,并且只检查线程是否在 X 毫秒后完成
  • @Shane.C 当我调试时,我看到程序必须同时运行线程和 while(true)...,所以,如果线程必须运行很长时间时间,我担心它会减慢我的程序。
  • 为什么不能在执行线程的最后一步调用 MyService.Stop?

标签: c# multithreading windows-services


【解决方案1】:
bool x=true;
while(x==true){
 if(isThreadFinished){
      x=false;
      MyService.Stop();
      break;
 }
}

【讨论】:

  • break 将退出循环,其余的填充无关
【解决方案2】:

为什么不使用委托? 您在 MSDN 官方网站上有一个示例和文档 here...

你只是在你的线程结束之前调用你的委托方法......

这更适合while循环...如果您的线程长时间运行,则更优化...

【讨论】:

    【解决方案3】:

    我不懂 C#,但通常你会有一个 API thread.join() 或类似的等待线程完成。

    如果没有别的,你可以阻塞同一个同步对象。

    在 Java 中,还有 Object.wait() 和 Object.notify() 可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 2015-09-29
      • 2013-06-20
      • 1970-01-01
      相关资源
      最近更新 更多