c#-控制台应用程序也将作为GUI运行
作者:互联网
Before anyone marks this as Duplicate, Please read
我有一个Windows应用程序,用C#编写.
现在我有一个要求,我也想从控制台运行它.像这样.
由于需要将输出显示到控制台,因此我将应用程序类型更改为“控制台应用程序”
现在的问题是,每当用户从Windows资源管理器中启动进程时(通过单击两次即可).控制台窗口也会在后面打开.
有办法避免这种情况吗?
在@PatrickHofman的帮助下,我尝试了什么.
>关注的how to run a winform from console application?
但是我还是有问题
>当我执行此操作https://stackoverflow.com/a/279811/3722884时,控制台将在新窗口中打开.我不要
>当我执行此https://stackoverflow.com/a/11058118/3722884时,即将-1传递给AllocConsole时,还会发生其他问题,如所引用的链接中所述.
解决方法:
好吧,我很好奇,我想我会在这玩.
>首先,我更新了Program.cs中的Main方法以接受参数,以便可以指定-cli并使应用程序在命令行上运行.
>其次,我在项目属性中将项目的输出类型更改为“控制台应用程序”.
>第三,我在Program.cs中添加了以下方法
private static void HideConsoleWindow()
{
var handle = GetConsoleWindow();
ShowWindow(handle, 0);
}
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
>第四,我将HideConsoleWindow称为非CLI模式下的第一个动作.
完成这些步骤后,我的(基本)应用程序如下所示:
[STAThread]
static void Main(string[] args)
{
if (args.Any() && args[0] == "-cli")
{
Console.WriteLine("Console app");
}
else
{
HideConsoleWindow();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
然后,如果我使用-cli开关在命令行上打开程序,则该程序将作为命令行应用程序运行,并将内容打印到命令行中;如果我正常运行,它将短暂地(极其)加载命令行窗口,然后以您所期望的正常应用.
标签:windows-applications,console-application,c,net 来源: https://codeday.me/bug/20191119/2039650.html