目标:想在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] + " ";
当不从父进程启动时,结果如下:args的元素个数是1或者更多,第0个是固定的.
当从父进程启动时,父进行传递的参数成为args的第二个元素:子进程中代码
1 string[] args = Environment.GetCommandLineArgs(); 2 //txtArgs.Text = Process.GetCurrentProcess().StartInfo.Arguments; 3 txtArgs.Text += args[0] + " "; 4 if (args.Length > 1) 5 { 6 txtArgs.Text += args[1]; 7 }
还有一个地方需要注意:那就是当父程序传递参数时,如果传递来的字符串内有空格的话,那会被当成参数的分界,像下面这样:
1 2 ///////////////////////////////////父程序/////////////////////// 3 ProcessStartInfo psi = new ProcessStartInfo(); 4 psi.FileName = @"C:Documents and SettingsAdministrator桌面ProcessArgsProcessChildinDebugProcessChild.exe"; 5 psi.Arguments = txtArgs.Text; 6 Process.Start(psi);//主要问题在这里 7 // 8 ///////////////////////////////////子程序/////////////////////// 9 string[] args = Environment.GetCommandLineArgs(); 10 txtArgs.Text += "第0个参数" + args[0]+" "; 11 int i = 1; 12 MessageBox.Show(args.Length.ToString()); 13 if (args.Length > 1)//看子程序是怎么接收数据的 14 { 15 while (i < args.Length) 16 { 17 txtArgs.Text += "第"+i+"个参数:"+args[i]+" "; 18 i++; 19 } 20 } 21 txtArgs.Text += "传递过来的参数个数是:"+args.Length.ToString(); 22 //结果: 23 第0个参数C:Documents and SettingsAdministrator桌面ProcessArgsProcessChildinDebugProcessChild.exe 24 第1个参数:这是从父进行传递来的参数 25 第2个参数:空格1 26 第3个参数:空格2 27 传递过来的参数个数是:4
在父程序传递数据如图:
子程序接收到情况如下:
找到原因的地址: http://stackoverflow.com/questions/10682212/how-to-pass-argument-to-a-process