2010-05-16 23 views
3

我有一個線程從隊列中取出數據並將其寫入另一個應用程序的STDIN。我使用流,但與.Write甚至.BeginWrite,當我發送1MB塊到第二個應用程序時,我的GUI變得滯後〜1秒。爲什麼?我的回調是這樣的:流寫入滯後我的GUI

void Progress(object sender, ProgressArgs e) { 
     if (this.InvokeRequired) { 
      this.BeginInvoke(new MethodInvoker(delegate() { Progress(sender, e); })); 
      return; 
     } 

     progressBar1.Value = (int) e.PercentDone; 
    } 
+0

下游過程的吞吐量是多少? – 2010-05-16 12:14:47

+1

您是否嘗試過使用代碼分析器(例如由Jet Brains或Red-Gate提供的產品)來查看可能導致延遲的原因? – Kane 2010-05-16 12:16:08

+0

你在用什麼電腦?如果它是一個單核心,低總線速度的電腦,這個操作可能會輕易落後於你的gui(以及你的電腦的其他部分)。 – 2010-05-16 12:22:38

回答

0

我會說,你調用這些回調過於頻繁,讓他們堵塞你的消息隊列BeginInvoke消息。嘗試保存上次收到的百分比值,並且只有在新的百分比與上一次不同時才調用BeginInvoke

+0

很好的建議,但我確信問題來自.Write方法,因爲即使將我的回調移除到gui,它仍然滯後。 – blez 2010-05-16 12:48:06