首页 > 代码库 > 记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)
记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)
目标:想在WinForm程序之间传递参数。以便子进程作出相应的处理。
一种错误的方法
父进程的主程序:
1 ProcessStartInfo psi = new ProcessStartInfo();2 psi.FileName = "ProcessChild.exe";3 psi.Arguments = txtArgs.Text;4 Process.Start(psi);//主要问题在这里
子进程的主程序:
1 txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;
结果如图:
根本就传不过来的,错误的原因在于:想当然的认为父进程的ProcessStartInfo这个类的实例的成员Arguments传递到子进程中去了。其实Process.Start()返回一个Process类型的对象,数据在返回的对象中保存着,并没有跨进程传递。
两种正确的方法
第一种:
从Main(string []args)接收传入的数据。这里要修改子进程的Main方法如下:
1 static void Main(string []args)2 {3 Application.EnableVisualStyles();4 Application.SetCompatibleTextRenderingDefault(false);5 Application.Run(new frmChild());6 }
因为默认是没有参数的。保存args里面的字符串,值得一提的是:args总是有至少一个元素,第二种方法方便看到。
第二种:使用Environment类的方法。
1 string[] args = Environment.GetCommandLineArgs();2 //txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;3 txtArgs.Text = args[0] + "\r\n";
当不从父进程启动时,结果如下:args的元素个数是1.
当从父进程启动时,父进行传递的参数成为args的第二个元素:子进程中代码
1 string[] args = Environment.GetCommandLineArgs();2 //txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments;3 txtArgs.Text += args[0] + "\r\n";4 if (args.Length > 1)5 {6 txtArgs.Text += args[1];7 }
找到原因的地址: http://stackoverflow.com/questions/10682212/how-to-pass-argument-to-a-process
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。