2014-09-02 63 views
0

我是多线程C#的新手,所以这可能是一个非常简单/基本的问题。我有一个使用单个工作线程执行任务的控制台应用程序。当工作任务完成时,我想用int来退出控制台应用程序。我很困惑如何做到这一点,因为Main()方法需要返回值,但线程异步执行。这里就是我想要做的事:工作线程在控制台应用程序完成后用int退出

class Program 
{ 

    static void Main(string[] args) 
    { 
     var exitCode = 1; 

     var deploymentManager = new DeploymentManager(() => 
       { 
        exitCode = 0; 
        return exitCode; //<----- doesn't work because main() needs to return something immediately 
       }); 

     var workerThread = new Thread(deploymentManager.Deploy); 

     workerThread.Start(); 
    } 
} 

这说明,我多么想返回退出码值,只有当线程完成并执行回调动作。

+2

只需在主线程中完成工作即可。在启动另一个线程时只有让主线程死掉的意义何在? – Servy 2014-09-02 14:43:23

+0

你的问题是什么? 'Main'被允许返回一个int值 – Jonesopolis 2014-09-02 14:46:06

+0

@Jonesy这并不能解决他的问题。 'Main'线程在他计算出退出代码之前完成。 – Servy 2014-09-02 14:47:06

回答

2

可以使用Enviornment.Exit为来自除Main方法一些其他位置的应用程序指定的退出代码:

static void Main(string[] args) 
{ 
    var exitCode = 1; 

    var deploymentManager = new DeploymentManager(() => 
      { 
       exitCode = 0; 
       Environment.Exit(exitCode); 
      }); 

    var workerThread = new Thread(deploymentManager.Deploy); 

    workerThread.Start(); 
} 

这就是说,有实在没有理由来创建一个新的线程在这里,如果你只是去让主线死亡。你可能只是在那里做工作。如果在其他线程正在执行时主线程正在做其他工作,这实际上只会有用。

+0

线程的原因,是后台任务中的工作导致应用程序冻结。我需要在工作中保持响应,所以我已经在工作线程中完成了这项工作。 – 2014-09-02 14:54:32

+0

@TylerJones如果这是一个winform应用程序,并且主线程正在抽取消息循环,那么您应该在问题中说。 Winforms有专门的框架来解决这些类型的问题。尽管它也提出了你为什么担心UI应用程序的返回码的问题。 – Servy 2014-09-02 14:57:15

+0

它是一个控制台应用程序。不是一个winforms应用程序。 – 2014-09-02 14:58:26

相关问题