本文转载:http://blog.csdn.net/oyi319/article/details/5753311

2.WinForm程序和控制台窗口Console

如果你调试过SharpDevelop的源程序,会发现它在DEBUG模式时会出现一个控制台窗口,以显示日志信息。或许我使用的方法与其不同,不过你可以试一试,写出我们自己的调试日志代码。

首先要解决的问题是如何在Debug模式时显示Console窗口。我确定,这是一个WinForm项目,也没有改过它的输出类型。我们需要在项目的入口点使用一些API函数将控制台显示出来:

它们是 AllocConsole 和 FreeConsole。

[c-sharp] view plaincopy
  1. [DllImport("kernel32.dll")]
  2. public static extern Boolean AllocConsole();
  3. [DllImport("kernel32.dll")]
  4. public static extern Boolean FreeConsole();

然后我们使它在Main()开始处判断DEBUG编译标记,调用AllocConsole方法显示控制台,然后在Main()的结束处判断DEBUG编译标记,调用FreeConsole方法关闭控制台。这样,我们就可以使用Console.Write等方法将调试信息显示在这个控制台窗口里。

为了达到更好的效果,我们写一个Shell类,用它来封装Console.WriteLine方法,输出个性化信息。我是这样做的,根据输出到控制台的文本的前几个字判断为“警告”、“错误”、“注意”时,输出带有黄色、红色、绿色的文字,其他输出信息输出控制台缺省的灰色文字,以起到区分效果,还要在每条信息前加上输出信息的当时时间。

这个Shell类是这样的:

[c-sharp] view plaincopy
  1. /// <summary>
  2. /// 与控制台交互
  3. /// </summary>
  4. static class Shell
  5. {
  6. /// <summary>
  7. /// 输出信息
  8. /// </summary>
  9. /// <param name="format"></param>
  10. /// <param name="args"></param>
  11. public static void WriteLine(string format, params object[] args)
  12. {
  13. WriteLine(string.Format(format, args));
  14. }
  15. /// <summary>
  16. /// 输出信息
  17. /// </summary>
  18. /// <param name="output"></param>
  19. public static void WriteLine(string output)
  20. {
  21. Console.ForegroundColor = GetConsoleColor(output);
  22. Console.WriteLine(@"[{0}]{1}", DateTimeOffset.Now, output);
  23. }
  24. /// <summary>
  25. /// 根据输出文本选择控制台文字颜色
  26. /// </summary>
  27. /// <param name="output"></param>
  28. /// <returns></returns>
  29. private static ConsoleColor GetConsoleColor(string output)
  30. {
  31. if (output.StartsWith("警告")) return ConsoleColor.Yellow;
  32. if (output.StartsWith("错误")) return ConsoleColor.Red;
  33. if (output.StartsWith("注意")) return ConsoleColor.Green;
  34. return ConsoleColor.Gray;
  35. }
  36. }

那么程序入口函数Main代码如下:

[c-sharp] view plaincopy
  1. /// <summary>
  2. /// 应用程序的主入口点。
  3. /// </summary>
  4. [STAThread]
  5. static void Main()
  6. {
  7. #if DEBUG
  8. AllocConsole();
  9. Shell.WriteLine("注意:启动程序...");
  10. Shell.WriteLine("/tWritten by Oyi319");
  11. Shell.WriteLine("/tBlog: http://blog.csdn.com/oyi319");
  12. Shell.WriteLine("{0}:{1}", "警告", "这是一条警告信息。");
  13. Shell.WriteLine("{0}:{1}", "错误", "这是一条错误信息!");
  14. Shell.WriteLine("{0}:{1}", "注意", "这是一条需要的注意信息。");
  15. Shell.WriteLine("");
  16. #endif
  17. Application.EnableVisualStyles();
  18. Application.SetCompatibleTextRenderingDefault(false);
  19. Application.Run(new Form1());
  20. #if DEBUG
  21. Shell.WriteLine("注意:2秒后关闭...");
  22. Thread.Sleep(2000);
  23. FreeConsole();
  24. #endif
  25. }

现在这个控制台窗口,只会在DEBUG模式时显示,而在Release编译时不会出现。 这是不是你想要的调试方法呢?

转载于:https://www.cnblogs.com/51net/p/3994149.html

WinForm程序启动控制台窗口Console相关推荐

  1. 【OpenGL】二十四、OpenGL 纹理贴图 ( 读取文件内容 | 桌面程序添加控制台窗口 | ‘fopen‘: This function may be unsafe 错误处理 )

    文章目录 一.文件读取 二.报错处理 ( 'fopen': This function or variable may be unsafe. ) 三.桌面程序添加控制台窗口 四.相关资源 一.文件读取 ...

  2. 向MFC应用程序添加控制台窗口

    简介 如果你曾经写过MFC应用程序,也许你忽略了控制台窗口.熟悉了控制台窗口的人会认为它是如此的便捷,我就是一个,认为printf或者cout是最优秀的调试函数,可以在不打开任务管理器的情况下在控制台 ...

  3. 让Win32窗口程序拥有控制台窗口

    让Win32窗口程序拥有控制台窗口 首先,为什么我们有了普通窗口后还要控制台窗口呢?因为我们可以用它方便的输出调试信息,而且普通玩家看到了也会觉得很高端.如果他会输几条命令,可能他会以为自己就是黑客了 ...

  4. 给Win32 GUI程序增加控制台窗口的方法

    给Win32 GUI程序增加控制台窗口的方法 2008年10月11日 星期六 下午 04:43 在Win32的GUI程序中,没有控制台窗口,我们输出调试信息时有些不方便,以往我的做法是使用Messag ...

  5. C# 控制台程序 隐藏控制台窗口

    在某些项目中,需要采用控制台程序,但是又不需要通过dos窗口进行交互,同时打算隐藏掉难看的控制台窗口.实现的方法很多,有的是修改链接命令.我采用的方法略有些麻烦,首先是给窗口命名,之后找到该窗口指针, ...

  6. 让Dev-C++运行C++程序的控制台窗口等待查看运行结果

    2019独角兽企业重金招聘Python工程师标准>>> 在使用Dev-C++运行C++程序时,控制台窗口总是一晃而过,无法看到输出结果,着实让人苦恼,解决这个问题 可以用以下方法: ...

  7. WinForm程序启动时不显示主窗体的实现方法

    望程序启动时不显示主窗体,而只是在SystemTray显示一个图标:当用户点击该图标时,才第一次显示出主窗体来. 作者在文章中已经说得很清楚,将Form的Visible属性设置为false是不行的,因 ...

  8. 对话框程序启动隐藏窗口

    江湖上有众多传闻,ShowWindow是最令人糊涂的,很多人说在OnInitDialog()加上ShowWindow(SW_HIDE)  对话框便不出现,实验证明,这是不行的,可是在非基于对话框的程序 ...

  9. java制作程序启动进度窗口

    运行效果如下: 代码如下: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension;import ...

  10. (个人向)C# winForm程序启动时报错:应用程序无法正常启动(0xc000007b)

    1.我的开发环境:windows 10 64bit.visual studio 2017,在本机上运行没有问题,但是在别人电脑上运行报错"应用程序无法正常启动(0xc000007b)&quo ...

最新文章

  1. Keepalived+lvs+httpd之负载均衡
  2. MySQL如何修改密码
  3. dict实现原理 python_5分钟看懂系列:Python 线程池原理及实现
  4. ole2高级编程技术 pdf_别不信,21天就可以学会python,《21天学通Python》pdf免费领取...
  5. 第一个Polymer应用 - (2)创建你自己的元素
  6. 1.企业安全建设指南(金融行业安全架构与技术实践) --- 企业信息安全建设简介
  7. SDUT 2482 二叉排序树
  8. 交换机配置常用的命令
  9. quartus频率计 时钟设置_FPGA021 基于QuartusⅡ数字频率计的设计与仿真
  10. iAntares OSx86 10.6.5 v3.2 繁简英整合版 安装过程【安装过程问题说明】
  11. unity粒子系统笔记
  12. 问:全局变量是否可以定义在被多个.c文件包含的头文件.h中?
  13. Windows10 磁盘活动时间百分之百导致系统卡顿解决方法
  14. pandas使用to_feather函数将dataframe保存为feather文件(需要依赖pyarrow包)提升大文件读取效率、pandas使用read_feather函数读取feather文件
  15. 20154327 Exp9 Web安全基础
  16. Influxdb自定义数据采样(CQ)
  17. Java 多线程 卖票
  18. 《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享(7)
  19. 关于“远程计算机或设备不接受连接”解决方法
  20. 推荐几个值得看的技术大佬

热门文章

  1. php数组array_filter,php数组array_filter()函数和array_slice()函数
  2. 【C++入门】C++ List类
  3. git push命令入门
  4. 【进阶3-4期】深度解析bind原理、使用场景及模拟实现
  5. 三、MQTT Windosw下的 进一步调试
  6. Node.js 使用http客户端向网站请求数据并保存
  7. 新浪微博分享 小记!!!(尚未成功)
  8. js【Object.prototype.hasOwnProperty()方法】
  9. JQuery Easy Ui dataGrid 数据表格 --转
  10. MFC 文档 视图 框架窗口间的关系 和消息传送规律