在wpf中使用Process.Start()启动了一个程序,要怎样才能等待这个程序执行完并输出结果后再执行后面的语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在wpf中使用Process.Start()启动了一个程序,要怎样才能等待这个程序执行完并输出结果后再执行后面的语句相关的知识,希望对你有一定的参考价值。

上代码
private void Calculate(object sender, RoutedEventArgs e)
...
Process.Start(sccppath, datpath + " " + swipath + " " + ctrpath);


上面这个是一个button按钮的触发事件。Process.Start里面的参数要从控件中获得。
有什么没看懂我可以再补充。
在线等,挺急的,就这么多金币,都给了。

建议通过进程间通信完成
在程序A中调用Process.Start带上通讯的必要参数,在程序B启动时根据参数执行必要处理,在处理完成后,根据提供的参数依据协议向A通知。
提供两种思路:
1、A窗口通过回调处理Window消息,在调用Process.Start时带上自己的窗口句柄,B启动记录该窗口句柄,在完成指定功能处理后,向该窗口句柄发送消息。A收到消息,继续接下来的处理。
2、A创建Socket在指定端口侦听,在调用Process.Start时,带上IP(分布式)和端口,B启动后完成指定处理,便可以依据通讯协议,向IP的端口发送通知。
参考技术A             process.Exited += delegate
            
                //进程退出后你想做的
            ;

WPF 利用Process.Start()方法启动指定路径下的exe文件并传递参数接收参数

WPF 利用Process.Start()方法启动指定路径下的exe文件并传递参数接收参数

 

在开发中遇到这样一个需求:WPF程序A启动WPF程序B并且传递参数,WPF程序B接收参数并处理。

 

如何来实现这样的需求呢,网络上已经有很多的文章描述这个问题,在这里做个记录。

 首先通过如下代码启动WPF客户端B:

        private void ActionStartClientExcute()
        {
            var address = "exe位置";
            Process process = new Process();
            process.StartInfo.FileName = address;
            process.StartInfo.Arguments = "arg1 arg2";
            process.StartInfo.UseShellExecute = true;
            process.Start();
        }

在接收客户端中添加如下代码:

先定义一个MainApp类,这个类中必须有一个带参数的Main(string[] args)函数,并且将带有Main函数的MainApp类设置为启动对象,

选择当前项目->然后右键->选择属性->应用程序面板,设置启动对象。

外部传递过来的参数就在string[] args里面,例如传递的参数是字符串"arg1 arg2",则args的内容是args[0]="arg1",args[1]="arg2",每个数组元素间是以空格分隔的。

在项目中应该有一个App.xaml和一个App.xaml.cs文件。他们继承至Application类,在App.xaml里面设置程序的启动页面StartupUri="Window.xaml",也就是我们原先的程序界面。

在这里我们需要在Main函数最后实例化这个App类:如代码中InitApp方法。

    public class MainApp 
    {
        [STAThread]
        public static void Main(string[] args)
        {
            if (args != null && args.Length == 2)
            {
                string arg1= args[0].Trim();
                string arg2= args[1].Trim();
            }
            InitApp();
        }

        public static void InitApp()
        {
            App app = new App();
            app.InitializeComponent();
            app.Run();
        }
    }

这样就可以成功实现WPF程序A打开WPF程序B,并传递参数这个需求啦!!!

 

以上是关于在wpf中使用Process.Start()启动了一个程序,要怎样才能等待这个程序执行完并输出结果后再执行后面的语句的主要内容,如果未能解决你的问题,请参考以下文章

process.start启动exe,程序中会调用配置文件的路径是相对路径,产生启动错误,怎么办?

在Winform或WPF中System.Diagnostics.Process.Start的妙用

.Net Core 3.1 Process.Start("www.website.com") 在 WPF 中不起作用

System.Diagnostics.Process 启动进程资源或调用外部的命令的使用

安装程序在使用 Process.Start() 启动时失败,但在双击时工作

csharpcodeprovider:不能使用 Process.Start()