我有用C#編寫的.NET WinForms應用程序。爲了支持批量操作,我現在想讓應用程序能夠在控制檯中運行。如何修改我的WinForms應用程序以便在控制檯中運行?
是否有可能在啓動時檢測它是否在控制檯中運行?
爲了達到這個目的,我需要做些什麼修改?
我有用C#編寫的.NET WinForms應用程序。爲了支持批量操作,我現在想讓應用程序能夠在控制檯中運行。如何修改我的WinForms應用程序以便在控制檯中運行?
是否有可能在啓動時檢測它是否在控制檯中運行?
爲了達到這個目的,我需要做些什麼修改?
你應該在你的解決方案的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窗體將會彈出並執行其操作。否則,你通過命令行來做你需要做的事情,然後退出而不顯示錶單。
您可以使用AllocConsole功能分配一個控制檯爲您的WinForms應用程序。你可以在C#上找到更多關於如何調用它的信息,這個信息將被編輯爲page。
但是,這不會使它成爲一個真正的控制檯應用程序,我聽說有一些限制,但是,它可能會取決於您的確切需要。
如果您有興趣從Windows窗體應用程序分配控制檯,您可能會對我的ConsoleDotNet包裝器感興趣:mischel.com/pubs/consoledotnet/consoledotnet.zip。幾年前我爲DevSource寫了這篇文章。三篇文章中的兩篇仍然可用。不幸的是,第一篇文章(解釋設置)已經失蹤。 – 2010-09-23 14:29:35
我不知道爲什麼我需要分配一個控制檯:我想要做的是從控制檯運行我的應用*。 – 2010-09-23 14:30:44
@tom:當你想要與控制檯進行交互時,我會閱讀你的問題,以便你的應用程序想要將東西寫回控制檯,並讓用戶(或其他進程)通過控制檯向其發送命令。如果你只想接受一些命令行參數並且不顯示錶單就運行,那麼Coding Gorilla的答案就更好了。 – 2010-09-23 14:46:08
支持批處理操作?你的意思是運行批處理文件?如果是這樣,請查看processstartinfo:http://www.debugging.com/bug/9625。我已經從Windows服務,Windows應用程序,控制檯應用程序運行批處理文件,不管你在哪裏,它關係到你得到的是什麼樣的人。 – Merritt 2010-09-23 14:17:01
主要原因是我的GUI允許用戶在運行之前進行更改,在批處理模式下,我希望它能夠繼續。 – 2010-09-23 14:29:39
如果您的對象需要了解您處於控制檯或GUI中,則可以設置全局變量。更好的是,您可以使用GUI和控制檯特定的類來實現接口或從基類繼承,或者兩者都取決於應用程序的結構。 – 2010-09-24 21:24:58