2014-07-16 168 views
1

我需要從其創建的線程以外的線程訪問DataGridView控件。我讀過我必須使用一個委託,它的工作原理,但我需要等待委託完成之前繼續在線程中。我試圖在BeginInvoke之後撥打EndInvoke,但線程仍在繼續。C#在繼續之前等待委託完成

public void ArrangeGrid() 
{ 
    ArrangeGridHandler ag = ArrangeGridAsync; 
    IAsyncResult result = ag.BeginInvoke(cb, null); 
    ag.EndInvoke(result); 
} 

當我打電話ArrangeGrid()線程將繼續即使還沒有完成。我能怎麼做? 謝謝!

+0

Delegate.BeginInvoke不會調用它在你的GUI線程。嘗試'Control/Form.Invoke(...);'。這將在正確的線程上執行並等待完成。 – Chris

回答

2

當使用異步方法時,將爲您創建一個新線程。

嘗試使用Invoke

public void ArrangeGrid() 
    {   
     if(this.InvokeRequired) 
      { 
      Action arrange = ArrangeGrid ; 
       this.Invoke(arrange); 
      } 
      else 
      { 
      //insert your code here 
      } 
    } 
+0

它只有在我一步一步執行時纔有效,否則線程似乎不會等待'ArrangeGrid'完成。 – Vitto

+0

它的工作原理,還有另一種方法稱爲之前有同樣的問題。謝謝! – Vitto

相關問題