先用代码说话吧:
 private void tb_moviename_Leave(object sender, EventArgs e) //用户切换文本输入框时调用外部程序
        {
            ProcessStartInfo P_info = new ProcessStartInfo("WEBIE.exe");
            P_info.WindowStyle = ProcessWindowStyle.Hidden;
            P_info.CreateNoWindow = true;
            P_info.Arguments = this.tb_moviename.Text.ToString();
            P_info.RedirectStandardInput = true;
            P_info.RedirectStandardOutput = true;
            P_info.UseShellExecute = false;
            Process p_inteligent = Process.Start(P_info);
            this.textBox2.Text = this.textBox2.Text = p_inteligent.StandardOutput.ReadToEnd();//在另一个文本框中显示外部程序执行结果(如果没有这一句,则用户感觉不到停顿)       
        }我的问题:
         在这个函数执行的时候,觉得有几秒钟的停顿,检查是因为最后一句代码导致,但是我需要得到外部程序执行的结果,请教一下专家,如何解决这个问题,让用户不感觉到停顿?
         同时也想问一下,如何让启动的这个进程不停的监听用户的输入并处理?

解决方案 »

  1.   

    可以用异步调用或线程来做,因为程序执行完“}”后才会更新窗口~~
     这个this.textBox2.Text = this.textBox2.Text = p_inteligent.StandardOutput.ReadToEnd();可能耗时太久,出现界面假死~~
      

  2.   

    太耗时的方法放在UI线程里面,UI在调用的时候会有假死的现象,做个异步线程的调用,异步线程里面别把TextBox控件放进去,传字符串就可以了,要不然使用Invoke()还会停止;
    监控文本的修改可以用事件TextChanged,加载个函数就行了