我们经常有一些用控制台实现的简单应用,这种应用一般都是一步一步“向导”式执行,在每一步上收集用户的输入,最后得到程序执行的结果。但有些用户可能不喜欢用键盘操作的命令行界面,还是愿意用鼠标点点按钮的 Windows 窗体。另外控制台程序的参数输入是按顺序执行,到了下一步就不能再更改前面的输入了,而在 Windows 窗体上我们可以等用户把所有需要的参数都已录入完成并进行了验证后,再一次性提交执行。要实现这两种需求,一个好的办法就是把控制台程序“嵌入”到 WinForm 中执行,这样既能给用户以良好的使用体验,又能复用已有的控制台程序。

所谓“嵌入”执行,是指写一个 WinForm 程序去调用控制台程序,并向控制台程序传入参数数据,读取控制台的输出。其中的关键是重定向控制台程序的输入输出,用到的主要类型为 Process、ProcessStartInfo、StreamWriter。

假设已有控制台程序 DemoConsole.exe,具体步骤如下:

1. 新建 Windows 应用程序,在 Form 窗体中设置启动 DemoConsole、接受用户输入数据和显示 DemoConsole 输出的界面元素,比如按钮、文本框等。

2. 用 DemoConsole.exe 文件名初始化 ProcessStartInfo,并设置 ProcessStartInfo 对象的相关属性值,使其不再使用 Windows 外壳程序执行,不显示窗体,还要重定向标准输入和输出。

3. 初始化 Process,设置 Process 对象的 StartInfo 属性值为步骤 2 中得到的 ProcessStartInfo 对象。处理 Process 对象的 OutputDataReceived 事件,可以获取并显示 DemoConsole 的输出。调用 Process 对象的 Start 方法启动 DemoConsole 进程。

4. 访问步骤 3 中得到的 Process 对象的 StandardInput 属性,可以得到一个 StreamWriter 类型的对象,在调用 Process 对象的 BeginOutputReadLine 方法后,就可以通过 StreamWriter 对象的 WriteLine 方法向 DemoConsole 传入参数数据,驱动 DemoConsole 执行。

5. DemoConsole 执行完毕后,把 StreamWriter 和 Process 对象关闭。

我们这里用到的 Process 类型其功能是非常强大的,当然不仅仅可以访问控制台程序,实际上它对本地和远程的各种 Windows 程序都可以控制和监视。但本文重点不在此,就不再赘述了。

示例程序下载
http://files.cnblogs.com/ibmfm/ConsoleRedirect.rar

转载于:https://www.cnblogs.com/DoNetCShap/archive/2012/06/26/2564478.html

把控制台程序嵌入到 WinForm 中执行相关推荐

  1. ActiveX控件制作与发布,如何将您的C++程序嵌入到浏览器中

    本文演示如何将Qt应用程序打包嵌入IE浏览器并发布. 1. 例子Qt程序: 新建项目,选择Qt Library类型,类名为ClassDemo. 新建QtGui类(继承QWidge)类名ClassGui ...

  2. Winform中实现执行cmd命令的工具类

    场景 Winform中执行cmd命令的工具类,比如调用某些exe,类似mysqldump.exe这样类似的命令. 新建工具类CmdHelper using System; using System.C ...

  3. c# Winform 程序嵌入PPT

    记录一下,嵌入ppt程序遇到的问题........................... 在网上找了很多资料,关于嵌入ppt浏览ppt的例子和方法,使用下来都是一大推问题.. 最后选择了打开ppt程序 ...

  4. Win10中控制台程序输出阻塞导致程序卡死

    问题描述: 在win10下运行cmd程序,发现程序回卡死,卡死的时候发现对cmd窗口回车会叫醒 问题原因: 是因为在Win10程序运行的过程中,无意用鼠标左键点击来了控制台,则控制台进入"快 ...

  5. 详解在QT中写控制台程序 实例

    详解在QT中写控制台程序 实例 在QT中写控制台程序 实例是本文介绍的内容,不多说了,先来看本文内容. AD: 本文介绍的是详解在QT中写控制台程序 实例,来看那内容.找到两种方法可以写控制台程序 第 ...

  6. Winform中怎样重写窗体关闭事件实现验证密码通过才能关闭窗体

    场景 需要在Winform中执行一些定时器,需要该窗体一直开启,防止因点击窗体的关闭误操作.所以需要在点击叉号进行关闭时验证一个密码,密码正确则允许关闭,否则不允许关闭. 效果如下: 注: 博客: B ...

  7. windows程序和控制台程序

    入口 windows程序的入口函数为winmain winmain 控制台程序的入口函数为main 形式 windows程序是窗口程序 控制台程度是模拟dos的控制台输出类程序 报错 error LN ...

  8. VB.NET在WinForm中嵌入谷歌浏览器_制作全屏显示网页程序_并读取INI配置文件_根据配置文件显示不同的网页---VB.NET工作笔记016

    我们做了个项目,科技馆的,需要把绚丽的网页,全屏放到浏览器上显示,但是....他们做的这个网页...我去,只支持谷歌这样的浏览器,在IE这样的浏览器模式下,显示有问题... 不知道是不是因为,没有使用 ...

  9. c# winform html 表,C# winform中嵌入Excel实现复杂表格的显示和控制

    龙源期刊网 http://www.doczj.com/doc/7c6e747d7375a417866f8fac.html C# winform中嵌入Excel实现复杂表格的显示和控制 作者:斯琴巴图杨 ...

最新文章

  1. GridView 行颜色变化
  2. JMeter基础之——录制脚本
  3. .NET Core R2安装教程及Hello示例
  4. redis性能吞吐量瓶颈_面试官:如何用慢查询找到 Redis 的性能瓶颈?
  5. Linux: centOS6.5 RabbitMQ
  6. 利用SQL查找表中的质数(prime number)和完全数(perfect number)以及几个有趣的SQL语句...
  7. mysql中文注入_SQL注入之Mysql报错注入
  8. r语言实现sem_统计基础:【18】使用Excel和R语言来实现抽样
  9. 对接生态:Logstash 接入日志服务
  10. java 主流框架_java的三大主流框架介绍
  11. 说一说协议生成器 - Ricequant米筐量化
  12. win7打开桌面计算机很慢,鼠标右键刷新桌面很慢怎么办?Win7右键刷新反应特别慢的解决方法...
  13. Linux,Xshell
  14. 1.1.Perl环境安装-Windows下环境安装
  15. Math.Round函数四舍五入的问题
  16. 时间序列差分后去除空值
  17. MiCO物联网操作系统漫谈
  18. 人类还能重启超音速旅行吗?
  19. hdu 1206 劲乐团
  20. 【Python入门】Turtle海龟库:利用海龟画笔交互绘制一个万花筒

热门文章

  1. windows下GIT使用记录--00准备阶段
  2. 利用霍夫变换做直线检测的原理及OpenCV代码实现
  3. 硬盘录像机和服务器,硬盘录像机和视频监控服务器
  4. 电脑 计算机服务打不开怎么办理,电脑xlsx打不开怎么办
  5. 优秀的Java程序员必须了解GC的工作原理
  6. linux I/O--I/O多路复用--select总结(三)
  7. 应用程序 mysql 连接_学生信息管理系统之四:实现应用程序与数据库的连接
  8. 【vue】介绍一个vuejs 和 element 搭建的一个后台管理界面
  9. 函数(复习),闭包,DOM
  10. Uva 10217 概率