更好的解决方案:http: //www.nerdyhearn.com/blog/157/
这是该网站的代码:
[DllImport("kernel32.dll")]
static extern bool AttachConsole(int dwProcessId);
private const int ATTACH_PARENT_PROCESS = -1;
[STAThread]
static void Main(string[] args)
{
// Enable visual elements just like always
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
// Attach to the parent process via AttachConsole SDK call
AttachConsole(ATTACH_PARENT_PROCESS); // <-- important point here
Console.WriteLine("This is from the main program");
Application.Run(new Form1());
}
您可以在需要的特殊情况下随意使用AttachConsole
通话。这要好得多且灵活得多,并且不需要您更改应用程序清单。如果它是一个 win32 应用程序,对你的应用程序有好处。如果它是从 cmd 启动的,那么输出将按预期显示。
我的观点:这只是一些在 Unix 世界中如此纯粹和自然的概念的一些无用的微软复杂化。如果您的应用程序是从可视启动器(图标、nautilus..)启动的,则输出将丢失。您可以从控制台启动您的应用程序,并将其获取到控制台中。如果需要,您可以重定向输出,这一切都合乎逻辑且功能强大。与微软...它臃肿并且妨碍每个人。