目标:想在WinForm程序之间传递参数。以便子进程作出相应的处理。

一种错误的方法

父进程的主程序:

             ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = "ProcessChild.exe";
psi.Arguments = txtArgs.Text;
Process.Start(psi);//主要问题在这里

子进程的主程序:

txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;

结果如图:

根本就传不过来的,错误的原因在于:想当然的认为父进程的ProcessStartInfo这个类的实例的成员Arguments传递到子进程中去了。其实Process.Start()返回一个Process类型的对象,数据在返回的对象中保存着,并没有跨进程传递。

两种正确的方法

第一种:

  从Main(string []args)接收传入的数据。这里要修改子进程的Main方法如下:

         static void Main(string []args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmChild());
}

因为默认是没有参数的。保存args里面的字符串,值得一提的是:args总是有至少一个元素,第二种方法方便看到。

第二种:使用Environment类的方法。

             string[] args = Environment.GetCommandLineArgs();
//txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;
txtArgs.Text = args[] + "\r\n";

当不从父进程启动时,结果如下:args的元素个数是1或者更多,第0个是固定的.

当从父进程启动时,父进行传递的参数成为args的第二个元素:子进程中代码

             string[] args = Environment.GetCommandLineArgs();
//txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;
txtArgs.Text += args[] + "\r\n";
if (args.Length > )
{
txtArgs.Text += args[];
}

  还有一个地方需要注意:那就是当父程序传递参数时,如果传递来的字符串内有空格的话,那会被当成参数的分界,像下面这样:

 ///////////////////////////////////父程序///////////////////////
ProcessStartInfo psi = new ProcessStartInfo();
psi.FileName = @"C:\Documents and Settings\Administrator\桌面\ProcessArgs\ProcessChild\bin\Debug\ProcessChild.exe";
psi.Arguments = txtArgs.Text;
Process.Start(psi);//主要问题在这里
//
///////////////////////////////////子程序///////////////////////
string[] args = Environment.GetCommandLineArgs();
txtArgs.Text += "第0个参数" + args[]+"\r\n";
int i = ;
MessageBox.Show(args.Length.ToString());
if (args.Length > )//看子程序是怎么接收数据的
{
while (i < args.Length)
{
txtArgs.Text += "第"+i+"个参数:"+args[i]+"\r\n ";
i++;
}
}
txtArgs.Text += "传递过来的参数个数是:"+args.Length.ToString();
//结果:
第0个参数C:\Documents and Settings\Administrator\桌面\ProcessArgs\ProcessChild\bin\Debug\ProcessChild.exe
第1个参数:这是从父进行传递来的参数
第2个参数:空格1
第3个参数:空格2
传递过来的参数个数是:

在父程序传递数据如图:

子程序接收到情况如下:

找到原因的地址:  http://stackoverflow.com/questions/10682212/how-to-pass-argument-to-a-process

记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)的更多相关文章

  1. 在Winform程序中设置管理员权限及为用户组添加写入权限

    在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身 ...

  2. (转)在Winform程序中设置管理员权限及为用户组添加写入权限

    本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...

  3. Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

     Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halco ...

  4. WinForm程序中两份mdf文件问题的解决

    在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...

  5. 在C#中winform程序中应用nlog日志工具

    在C#中winform程序中应用nlog日志工具,配置文件简单应用. 文件名 nlog.config,请注意修改属性为"始终复制",发布时候容易遇到不存在文件的错误提示. 通过Nu ...

  6. C#中Winform程序中如何实现多维表头【不通过第三方报表程序】

    问题:C#中Winform程序中如何实现多维表头. 在网上搜了很多方法,大多数方法对于我这种新手,看的都不是很懂.最后在新浪博客看到了一篇比较易懂的文章:[DataGridView二维表头与合并单元格 ...

  7. 在Winform程序中使用Spire.Pdf实现页面添加印章处理

    在一些场合,我们往往需要使用印章来给每页文档加盖一个印章,以表示该文档经过某个部门的认证的,常规的做法就是打印文档后盖章,如果需要电子档再行扫描一下.这样的的处理,如果文档很多,且仅仅需要电子文档的就 ...

  8. .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...

  9. .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...

随机推荐

  1. 7个高性能JavaScript代码高亮插件

    本文由码农网 – 小峰原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 对于喜欢写技术博客的同学来说,一定对代码高亮组件非常熟悉.一款优秀的JavaScript代码高亮插件,将会帮助你渲染 ...

  2. js中的constructor

    定义和用法 constructor 属性返回对创建此对象的 Date 函数的引用. 语法 object.constructor constructor属性不影响任何JavaScript的内部属性.in ...

  3. 解决安装rpm包依赖关系的烦恼 - yum工具介绍及本地源配置方法

    版权声明:本文发布于http://www.cnblogs.com/yumiko/,版权由Yumiko_sunny所有,欢迎转载.转载时,请在文章明显位置注明原文链接.若在未经作者同意的情况下,将本文内 ...

  4. MySQL 索引

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是 ...

  5. Hadoop技巧(03):HostName命名带来的问题

    阅读目录 序 HostName 问题 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink ...

  6. PL/SQL连接错误:ora-12705:cannot access NLS data files or invalid environment specified

    适合自己的解决方法: 排查问题: 1. 你没有安装Oracle Client软件.这是使用PL/SQL Developer的必须条件.安装Oracle Client后再重试.2. 你安装了多个Orac ...

  7. Java Generics and Collections-2.3

    2.3 Wildcards with super 这里就直接拿书上的例子好了,这是Collections里面的一个方法: public static <T> void copy(List& ...

  8. Docker初体验

    ## Docker初体验 安装 因为我用的是mac,所以安装很简单,下载dmg下来之后拖拽安装即可完成. 需要注意的就是由于之前的docker是基于linux开发,不支持mac,所以就出现了docke ...

  9. mysql timeout知多少

    1.timeout变量知多少 打开mysql,用show variables like '%timeout%'命令一看,不看不知道,一看吓一跳,结果如下面所示,这么多timeout相关变量,一下就吓尿 ...

  10. 详解用CSS3制作圆形滚动进度条动画效果

    主  题 今天手把手教大家用CSS3制作圆形滚动进度条动画,想不会都难!那么,到底是什么东东呢?先不急,之前我分享了一个css实现进度条效果的博客<CSS实现进度条和订单进度条>,但是呢, ...