首页 > 解决方案 > 进程为 WaitForExit() 时 WPF 应用程序卡住

问题描述

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

我在 UI 中的代码是:

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 卡住了。

我该如何解决?

标签: c#wpf

解决方案


I solved in like @Sinatr's comment, I made the method Button_Click async, and open a new 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",);
   }
}

推荐阅读