0

我无法在这里找到我正在寻找的答案,但如果是,请链接它,我将关闭这个重复的帖子。

作为我正在开发的程序的一部分,我希望按此顺序发生三件简单的事情:

1.) 显示选框进度条 2.) 通过 CMD 运行一些命令并将输出移动到可访问的字符串 3.) 停止/隐藏进度条

我看到的问题是我的代码没有按顺序执行,我对为什么感到非常困惑。这似乎是不可能的步骤 2-1-3。

更奇怪的是,如果我在步骤 1 和步骤 2 之间取消注释消息框,事情就会按顺序执行。

新的 CMD 流程是否有什么东西让这变得异常?

这是我的这种方法的代码:

        //STEP 1 - Updates label and starts progress bar
        lblSelectDiagnostic.Text = "Diagnostic Running";
        progressBarDiag.Visible = true;
        progressBarDiag.MarqueeAnimationSpeed = 100;

        //MessageBox.Show("Status Updated");

        //STEP 2 - Runs "Test Internet Connection"

        //Gets selected diagnostic name
        string strSelectedDiag = listBoxDiagnostics.SelectedItem.ToString();
        var name = strSelectedDiag.Substring(strSelectedDiag.LastIndexOf(':') + 1);
        strSelectedDiag = name.Trim();

        if (strSelectedDiag.Contains("Test Internet Connection"))
        {
            //Pings Google
            ProcessStartInfo info = new ProcessStartInfo();
            info.RedirectStandardError = true;
            info.RedirectStandardInput = true;
            info.RedirectStandardOutput = true;
            info.UseShellExecute = false;
            info.FileName = "cmd.exe";
            info.CreateNoWindow = true;
            //Creates new process
            Process proc = new Process();
            proc.StartInfo = info;
            proc.Start();
            //Writes commands
            using (StreamWriter writer = proc.StandardInput)
            {
                if (writer.BaseStream.CanWrite)
                {
                    writer.WriteLine("ping www.google.com");
                    writer.WriteLine("exit");
                }
                writer.Close();
            }
            string PingGoogle = proc.StandardOutput.ReadToEnd();
            proc.Close();
        }

        //STEP 3 - Resets label and stops progress bar
        progressBarDiag.MarqueeAnimationSpeed = 0;
        progressBarDiag.Visible = false;
        lblSelectDiagnostic.Text = "Select Diagnostic to Run:";

-谢谢!

4

1 回答 1

1

进度条不会显示,因为您在逻辑所在的同一线程中绘制它。您将不得不在另一个线程中执行此操作。最简单的方法是使用后台工作者

这将对您有所帮助:http: //msdn.microsoft.com/en-us/library/cc221403 (v=vs.95).aspx

于 2013-02-13T21:08:39.683 回答