WPF应用程序在进程为WaitForExit()时被卡住

时间:2018-07-30 08:25:27

标签: c# wpf

我有一个带有按钮的简单WPF应用程序,单击该按钮时,它将调用一个启动进程的方法-cmd命令,该cmd命令可能需要1分钟。问题是,此时(当进程等待退出并获得结果时)应用程序被卡住了。

我在用户界面中的代码是:

private void Button_Click(object sender, RoutedEventArgs e)
{
    // the method Import take 1 minute
    var result = Helpers.Import();
    if (result)
    {
    MessageBox.Show("Sucess", "Sucess");
    }
    else
    {
    MessageBox.Show("Error", "Error",);
    }
}

我在BL中的代码是:

public static bool Import()
{
    ProcessStartInfo info = new ProcessStartInfo(@"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\witadmin.exe", arguments);
    info.CreateNoWindow = true;
    info.WindowStyle = ProcessWindowStyle.Hidden;
    Process p = Process.Start(info);
    p.WaitForExit();

    if (p.ExitCode == 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

当应用程序等待退出代码时,UI卡住了。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

方法WaitForExit()->指示Process组件等待无数时间,以使Process和事件处理程序退出。这可能会导致应用程序停止响应。

答案 1 :(得分:0)

我像@Sinatr的评论一样解决了问题,使方法Button_Click异步了,并打开了一个新Task。

private async void Button_Click(object sender, RoutedEventArgs e)
{
   bool result = false;
   await Task.Run(() =>
   {
       import = Helpers.Import();
   });
   if (result)
   {
       MessageBox.Show("Sucess", "Sucess");
   }
   else
   {
       MessageBox.Show("Error", "Error",);
   }
}