Behavior in WinForm/Console Hybrid Application

后端 未结 4 2029
走了就别回头了
走了就别回头了 2021-01-20 14:28

I have a WinForm project that I want to be usable as a console app if certain arguments are passed into it. Using some tips I read from here, I used the following code to m

相关标签:
4条回答
  • 2021-01-20 14:40

    It looks like there is no way around it: 1) If I want the output in console mode to behave like a dedicated console app, the console window must always be there. 2) If I want to hide the console when I run it in windowed mode, I will lose the blocking prints.

    0 讨论(0)
  • 2021-01-20 14:42

    The above will work, but it won't allow you to write to the console which is maddening if you're trying to debug exceptions. To write to the console from a Win Forms app, you need to apply the code described here: http://www.codeissue.com/issues/i24e1ef8e5a93b4/run-windows-form-application-as-console-app-c.

    0 讨论(0)
  • 2021-01-20 14:48

    Instead of this iffy method, you can accomplish this by just creating a winforms application and not displaying the main form if a certain argument is passed on the command line.

    Since a console application doesn't need a message loop, you don't call Application.Run() when called in console mode.

    So your Main() would be something like:

        static void Main(params string[] args)
        {
            if (args.Length > 0 && args[0] == "consolemode")
            {
                // do stuff 
            }
            else
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new MainForm());
            }
        }
    

    I haven't tried this but I think it would work.

    0 讨论(0)
  • 2021-01-20 15:00

    Maybe I've been doing it wrong but I've always done hybrids like this:

    [STAThread]
    public static int Main(string[] args)
    {
       if (args.Length > 0)
       {
          // run console code here
       }
       else
       {
          // start up the win form app
          Application.EnableVisualStyles();
          Application.SetCompatibleTextRenderingDefault(false);
          Application.Run(new MainForm());
       }
    
       return 0;
    }
    
    0 讨论(0)
提交回复
热议问题