2014-09-02 98 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

相關問題