C# 在方法执行时无法与wpf元素交互

C# 在方法执行时无法与wpf元素交互,c#,wpf,C#,Wpf,我创建了一个带有2个按钮的WPF应用程序。单击第一个按钮执行cmd并等待命令完成,因为我需要在执行完成后读取结果文件。在第二个按钮上,单击我正在通过进程kill停止执行cmd 但在开始执行命令之后,我无法在完成cmd的执行之前停止执行 有并行执行的方法吗 启动按钮代码 string filename = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "nunit-console.exe"); Process proc = Pro

我创建了一个带有2个按钮的WPF应用程序。单击第一个按钮执行cmd并等待命令完成,因为我需要在执行完成后读取结果文件。在第二个按钮上,单击我正在通过进程kill停止执行cmd

但在开始执行命令之后,我无法在完成cmd的执行之前停止执行

有并行执行的方法吗

启动按钮代码

string filename = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "nunit-console.exe");
 Process proc = Process.Start(filename, "/result:" + resultFile + ".xml " + fileName);
proc.WaitForExit();

只需删除
proc.WaitForExit()。这一行阻塞了接口线程,阻止了第二次按钮点击被注册

    System.Diagnostics.Process proc;

    private void Btn1Click(object sender, RoutedEventArgs e)
    {
        string filename = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "nunit-console.exe");
        proc = Process.Start(filename, "/result:" + resultFile + ".xml " + fileName);
    }

    private void Btn2Click(object sender, RoutedEventArgs e)
    {
        if (proc != null)
            proc.Kill();
    }

使用,因为主线程在等待
proc.WaitForExit()时被冻结@没有人是正确的。更确切地说,您的UI有自己的线程,需要遵循一些规则才能从其他线程更新UI或更改其他线程。查看异步/等待和从UI线程到UI线程的更新。这里有大量的示例和教程。请注意,您可能需要也可能不需要使用
WaitForExit()
。这取决于代码的其余部分,您没有费心显示这些部分。
进程
类提供异步处理I/O和状态处理。见例。在后台任务或线程中运行上述代码是逐字阅读问题的最明显方法,但还有其他方法可以解决此问题。