我想创建一个完整的混合应用,同时以Windows Forms
和Console Application
工作。当我在没有参数的情况下执行它或者不在控制台中执行它时,我希望应用程序打开GUI并离开控制台,就像从控制台调用普通的Windows窗体应用程序一样,但是响应用户并通过它与他交互在通知某些参数时控制台,例如接受条件和条件或确认文件覆盖。这可能吗?
P.S。:我不介意在运行GUI时有控制台输出,但我希望控制台在GUI上运行时保持隐藏状态,而在作为控制台运行时不需要GUI。
注意
在how to run a winform from console application?中填充的解决方案(创建表单项目然后更改为控制台)不会参加我,因为它会在从资源管理器调用应用程序时打开控制台窗口。
答案 0 :(得分:4)
WinForms和Console应用程序之间的区别在于它们以稍微不同的方式编译(参见此question)。控制台应用程序在清单中具有以下标志:
.subsystem 0x0003 // WINDOWS_CUI
WinForms应用程序如下:
.subsystem 0x0002 // WINDOWS_GUI
有很多与此主题相关的问题。例如,请参阅此one。 总的来说,据我所知,没有理想的解决方案,但有些解决方案在某种程度上有效。例如,试试这个:
修改后的 Main 方法:
[STAThread]
private static void Main(string[] args)
{
if (args.Length == 0)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
else
{
AllocateConsole();
Console.WriteLine("I'm a console application");
//...
FreeConsole();
}
}
此解决方案的缺点是: