我在按下WPF应用程序按钮时运行一个进程,如下所示:
private void btnGetValues_Click(object sender, RoutedEventArgs e)
{
string arg1 = "1";
Process p1 = new Process();
p1.StartInfo.CreateNoWindow = true;
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p1.StartInfo.FileName = "myexe.exe";
p1.StartInfo.Arguments = arg1;
p1.StartInfo.UseShellExecute = false;
p1.StartInfo.RedirectStandardOutput = true;
p1.StartInfo.RedirectStandardInput = true;
p1.StartInfo.RedirectStandardError = true;
p1.Start();
//while (!p1.HasExited)
//{
//}
MessageBox.Show(p1.StandardOutput.ReadToEnd());
}
问题是即使在进程执行后,按钮仍继续保持单击状态。可能是什么问题?
答案 0 :(得分:3)
为什么需要最后一个消息框?阅读它,它应该工作。如果您仍遇到问题,则可以在单独的线程中运行它。这是一种同时执行多个事物的方式。 here就是一个例子。
修改
抱歉,我理解错了。如果您希望按钮失去该外观,您可以将焦点设置为其他内容。private void button1_Click(object sender, EventArgs e)
{
string arg1 = "1";
Process p1 = new Process();
p1.StartInfo.CreateNoWindow = true;
p1.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p1.StartInfo.FileName = @"yourExecutable";
p1.StartInfo.Arguments = arg1;
p1.StartInfo.UseShellExecute = false;
p1.StartInfo.RedirectStandardOutput = true;
p1.StartInfo.RedirectStandardInput = true;
p1.StartInfo.RedirectStandardError = true;
p1.Start();
//while (!p1.HasExited)
//{
// }
MessageBox.Show(p1.StandardOutput.ReadToEnd());
button2.Focus(); // set button 2 to have a height of 0 so it is not visible
// or place it somewhere where it cannot be seen
}