我有一个带有按钮的简单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卡住了。
我该如何解决?
答案 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",);
}
}