C# 进程为WaitForExit()时WPF应用程序卡住
我有一个简单的WPF应用程序,它有一个按钮,当按钮点击它调用一个启动process-cmd命令的方法时,cmd命令可能需要1分钟。问题是,此时(当进程等待退出并获得结果时),应用程序被卡住了 我在UI中的代码是:C# 进程为WaitForExit()时WPF应用程序卡住,c#,wpf,C#,Wpf,我有一个简单的WPF应用程序,它有一个按钮,当按钮点击它调用一个启动process-cmd命令的方法时,cmd命令可能需要1分钟。问题是,此时(当进程等待退出并获得结果时),应用程序被卡住了 我在UI中的代码是: private void Button_Click(object sender, RoutedEventArgs e) { // the method Import take 1 minute var result = Helpers.Import(); if
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被卡住
如何解决它?方法
WaitForExit()
->指示流程组件等待无限长的时间,以便流程和事件处理程序退出。这可能会导致应用程序停止响应。我在like@Sinatr的评论中解决了这个问题,我让方法按钮\u单击
异步,然后打开一个新任务
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",);
}
}
UI线程中的Do't call
WaitForExit
可能重复。您可以创建一个新任务并等待它。考虑添加更多代码(理想地),这样某人就可以快速地使它异步。@ FAKECALEB我尝试了答案,但是没有成功,我给问题添加了更多的代码。我建议您用这些答案的尝试实现更新您的问题,以查看问题我知道WaitForExit()可能是原因,但我需要使用它,因为我需要ExitCode,我需要一种使用它的方法,并且仍然不会被卡住。好的,在您从ExitCode获得值后,您是否正在关闭流程?调用Close()当关联进程终止时。关闭分配给退出进程的可用内存。