Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C hybird Winforms/console应用程序返回cmd提示符_C# - Fatal编程技术网

C# C hybird Winforms/console应用程序返回cmd提示符

C# C hybird Winforms/console应用程序返回cmd提示符,c#,C#,我已经看到了许多用于C的混合gui/cli应用程序的示例。我已经实现了这样一个应用程序,但是我很难弄清楚如何防止.exe在命令行上运行时不能立即返回提示符 //defines for commandline output [DllImport("kernel32.dll")] static extern bool AttachConsole(int dwProcessId); private const int ATTACH_PARENT_PROCESS

我已经看到了许多用于C的混合gui/cli应用程序的示例。我已经实现了这样一个应用程序,但是我很难弄清楚如何防止.exe在命令行上运行时不能立即返回提示符

    //defines for commandline output     
    [DllImport("kernel32.dll")]
    static extern bool AttachConsole(int dwProcessId);
    private const int ATTACH_PARENT_PROCESS = -1;

    [STAThreadAttribute]
    static void Main(string[] args)
    {
        // load cli
        // redirect console output to parent process;         
        // must be before any calls to Console.WriteLine()         
        AttachConsole(ATTACH_PARENT_PROCESS);

        if (args.Length == 0)
        {
            //loads gui
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new form_Main());
        }
        else
        {

            cli_main cli = new cli_main();
            cli.start_cli(args);

            Console.WriteLine("finished");

            System.Windows.Forms.SendKeys.SendWait("{ENTER}");
            Application.Exit();

        }
    }
我得到以下输出

C:\Users\john\Documents\Visual Studio 2010\Projects\test\test\test\bin\Debug>test.exe -param1 test 
-param2 test2

C:\Users\john\Documents\Visual Studio 2010\Projects\test\test\test\bin\Debug>Output was successful. File saved as: c:\test\test.html
finished
当我知道我已经到达我的主代码的末尾时,完成的行是我输出的字符串。。。这在Winforms中工作得很好,我的项目是Winforms,我以gui的形式启动它,但现在我正在尝试使它混合gui/cli

它似乎在运行我的主代码和线程,我在调试中看到它们,它创建了我的最终输出文件

我只是很困惑,当从cmd行执行.exe时,如何保留它的参数,而不返回命令提示符??让它用闪烁的光标等待,然后输出关于html文件的行,然后完成该行,最后返回命令提示符

我试过很多方法,比如移除

System.Windows.Forms.SendKeys.SendWait("{ENTER}");
Application.Exit();
而不是使用Application.Exit;使用Environment.Exit0;但它总是立即返回到命令提示符,我还尝试在行结束后休眠5秒

cli.start_cli(args);
但这也不起作用,我想我不明白它怎么能立即返回到命令提示符,而且它甚至都不在命令行中

Console.WriteLine("finished");

FWIW,我也尝试了第一种方法。我最终只是使用以下方法隐藏控制台窗口:

IntPtr handle = GetConsoleWindow();
if (handle != IntPtr.Zero)
{
    ShowWindow(handle, 0);  // 0=SW_HIDE
}

这将完全隐藏窗口,甚至从任务栏也可以。它闪烁了一小秒,但这在我的情况下是可以接受的。FWIW,我也尝试了第一种方法。我最终只是使用以下方法隐藏控制台窗口:

IntPtr handle = GetConsoleWindow();
if (handle != IntPtr.Zero)
{
    ShowWindow(handle, 0);  // 0=SW_HIDE
}

这将完全隐藏窗口,甚至从任务栏也可以。它闪烁了一小秒,但这在我的情况下是可以接受的

我只是放弃了尝试创建混合CLI和GUI.exe,如果我将项目保留为winform,我会遇到上面的问题,如果我将其保留为console应用程序,那么我会弹出一个cmd窗口,我有一个解决方法,但仍然会在第二秒弹出。所以我只使用了2.exe,1代表gui,1代表cli,然后创建了一个.dll库来在2之间共享主代码。我只是放弃了尝试创建一个混合cli和gui.exe,如果我将项目保留为winform,我得到了上面的问题,如果我将其保留为console应用程序,那么我会弹出一个cmd窗口,我有一个解决办法,但仍然会弹出秒。因此,我只使用了2.exe,1代表gui,1代表cli,然后创建了一个.dll库来在2之间共享主代码。