C#:按下按钮运行一个进程

时间:2011-05-29 03:59:25

标签: c# wpf

我在按下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());
}

问题是即使在进程执行后,按钮仍继续保持单击状态。可能是什么问题?

1 个答案:

答案 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



        }