2010-09-23 66 views
3

我有用C#編寫的.NET WinForms應用程序。爲了支持批量操作,我現在想讓應用程序能夠在控制檯中運行。如何修改我的WinForms應用程序以便在控制檯中運行?

是否有可能在啓動時檢測它是否在控制檯中運行?

爲了達到這個目的,我需要做些什麼修改?

+1

支持批處理操作?你的意思是運行批處理文件?如果是這樣,請查看processstartinfo:http://www.debugging.com/bug/9625。我已經從Windows服務,Windows應用程序,控制檯應用程序運行批處理文件,不管你在哪裏,它關係到你得到的是什麼樣的人。 – Merritt 2010-09-23 14:17:01

+0

主要原因是我的GUI允許用戶在運行之前進行更改,在批處理模式下,我希望它能夠繼續。 – 2010-09-23 14:29:39

+0

如果您的對象需要了解您處於控制檯或GUI中,則可以設置全局變量。更好的是,您可以使用GUI和控制檯特定的類來實現接口或從基類繼承,或者兩者都取決於應用程序的結構。 – 2010-09-24 21:24:58

回答

8

你應該在你的解決方案的Program.cs文件,該文件包含:

static void Main() 
{ 
} 

你會在這個方法中發現有這樣的:

Application.Run(new Form1()); 

這是您的形式實際上是啓動,所以你可以做的是修改Main()到這樣的事情:

static void Main(string[] args) 
{ 
    if(args.Length < 1) 
    { 
     Application.Run(new Form1()); 
     return; 
    } 
    else 
    { 
    // Handle your command line arguments and do work 
    } 
} 

因此,如果您的程序沒有使用命令行參數被調用,那麼windows窗體將會彈出並執行其操作。否則,你通過命令行來做你需要做的事情,然後退出而不顯示錶單。

1

您可以在program.cs中使用main方法,並檢測是否傳入命令行參數,如果它們是批處理,則不顯示GUI。

public static void Main(string[] args) 
{ 
if (args.count > 0) { 
    //batch 
} else { 
    //gui 
} 

} 
+0

靜態主要方法已經存在。你只需要添加條件處理。 – 2010-09-23 14:20:12

+0

是的,對不起,我一直在做vb.net太久了。 – BlackICE 2010-09-23 14:30:07

+0

和downvote是? – BlackICE 2010-09-23 15:14:26

2

您可以使用AllocConsole功能分配一個控制檯爲您的WinForms應用程序。你可以在C#上找到更多關於如何調用它的信息,這個信息將被編輯爲page

但是,這不會使它成爲一個真正的控制檯應用程序,我聽說有一些限制,但是,它可能會取決於您的確切需要。

+0

如果您有興趣從Windows窗體應用程序分配控制檯,您可能會對我的ConsoleDotNet包裝器感興趣:mischel.com/pubs/consoledotnet/consoledotnet.zip。幾年前我爲DevSource寫了這篇文章。三篇文章中的兩篇仍然可用。不幸的是,第一篇文章(解釋設置)已經失蹤。 – 2010-09-23 14:29:35

+0

我不知道爲什麼我需要分配一個控制檯:我想要做的是從控制檯運行我的應用*。 – 2010-09-23 14:30:44

+0

@tom:當你想要與控制檯進行交互時,我會閱讀你的問題,以便你的應用程序想要將東西寫回控制檯,並讓用戶(或其他進程)通過控制檯向其發送命令。如果你只想接受一些命令行參數並且不顯示錶單就運行,那麼Coding Gorilla的答案就更好了。 – 2010-09-23 14:46:08

相關問題