当前位置: 首页 > 编程语言 > C#

WinForm-Console混合应用程序中的行为共享

时间:2023-04-10 16:38:11 C#

WinForm/Console混合应用程序中的行为使用我从这里读到的一些技巧,我使用以下代码来完成这项工作。[System.Runtime.InteropServices.DllImport("kernel32.dll")]privatestaticexternboolAllocConsole();[System.Runtime.InteropServices.DllImport("kernel32.dll")]privatestaticexternboolAttachConsole(intpid);...如果(!AttachConsole(-1)){AllocConsole();这行得通,但有一个烦人的副作用——所有输出似乎都是从后台线程生成的。当我从命令提示符运行程序时,输出显示输出前的下一个提示。我将项目属性的输出类型设置为控制台应用程序,这解决了问题,但现在始终显示控制台窗口-即使它在“WinForm模式”下运行。有没有一种方法可以兼顾控制台行为的两个方面,程序是当前进程,而控制台窗口在程序显示WinForm时不显示?更新:很抱歉没有澄清这一点。我在Program.cs中切换控制台和WinForm模式,如下所示://nowin是一个基于参数设置的boolif(nowin){if(!AttachConsole(-1)){AllocConsole();}//...这里是控制台模式代码...}else{//在窗口中运行Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(新Form1(argDict));}也许我做错了,但我总是这样混合使用:[STAThread]publicstaticintMain(string[]args){if(args.Length>0){//在这里运行控制台代码}else{//启动win表单应用程序Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);应用程序运行(新主窗体());}返回0;您可以通过不显示主窗体(如果在命令行上传递一些参数)来创建一个winforms应用程序来执行此操作,而不是这种不稳定的方式。由于控制台应用程序不需要消息循环,因此在控制台模式下调用时不会调用Application.Run()。所以你的Main()看起来像这样:staticvoidMain(paramsstring[]args){if(args.Length>0&&args[0]=="consolemode"){//dostuff}else{Application.启用视觉样式();Application.SetCompatibleTextRenderingDefault(false);应用程序运行(新主窗体());我还没有尝试过,但我认为它会起作用。看起来没有办法解决它:1)如果我希望控制台模式下的输出表现得像专用控制台应用程序,则控制台窗口必须始终存在。2)如果我想在窗口模式下运行时隐藏控制台,我将失去阻止打印。上面的工作,但如果你试图调试异常它不会让你写到控制台,这是令人抓狂的。要从WinForms应用程序写入控制台,您需要应用此处描述的代码:http://www.codeissue.com/issues/i24e1ef8e5a93b4/run-windows-form-application-as-console-app-c。以上就是《C#学习教程:WinForm/Console混合应用中的行为分享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: