WPF程序接收参数启动
每一个WPF应用程序,其实都有一个隐藏的Main函数。如果有的时候我们需要给WPF应用程序传递参数,我们需要自己写一个包含Main函数的类来实现。
首先定义一个MainApp类,这个类中必须有一个带参数的Main(string[] args)函数:
[STAThread] public static void Main(string[] args){...}
外部传递过来的参数就在string[] args里面,例如传递的参数是字符串“1 2 3”,则args的内容是args[0]="1",args[1]="2",args[2]="3",每个数组元素间是以空格分隔的。
然后,将带有Main函数的MainApp类设置为启动对象,选择当前项目->然后右键->选择属性->应用程序面板,设置启动对象。
这样打开程序,程序就会从MainApp类的Main函数启动,而不是原来隐藏的Main函数。但是这并没有结束,我们接收到参数以后,还需要启动以前的应用程序。
在项目中应该有一个App.xaml和一个App.xaml.cs文件。他们是一个自动生成的Application类,在App.xaml里面设置程序的启动页面StartupUri="Window.xaml",也就是我们原先的程序界面。
我们需要在新的MainApp类的Main函数最后实例化这个App类,然后运行,以启动Window.xaml所定义的窗口。
App app = new App(); app.InitializeComponent(); app.Run();
这样就能启动原来的界面。
Process.StartInfo用来向被调用的进程传递信息
StartInfo.FileName确定调用的进程名称
StartInfo.Arguments传递被调用的进程Main(string [] args)中的args[]字符串数组
写了两个控制台程序
1.被调用的程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Process信息传递1 { class Program { static void Main(string[] args) { foreach(string str in args) { Console.WriteLine(str); } Console.ReadKey(); } } }
2 调用被调用程序的程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; namespace Process_信息传递 { class Program { static void Main(string[] args) { Process process = new Process(); process.StartInfo.FileName = @"C:\Users\XXX\Desktop\C#\Process信息传递1\Process信息传递1\bin\Debug\Process信息传递1.exe"; process.StartInfo.Arguments = String.Format("大娃 二娃");//Arguments 传递的是Main(string []args)中的字符串数组,通常靠空格分隔字符串 process.Start(); Console.ReadKey(); } } }