2011-11-06 76 views
2

執行InvokeRequired時出現stackverflow錯誤。檢查InvokeRequired時發生Stackoverflow錯誤

System.StackOverflowException了未處理

enter image description here

如何解決呢? 有沒有信息我查看詳細信息。

修正版本:

public DialogResult ShowMessage(string msg, string caption, MessageBoxButtons buttons) 
    { 
     if (InvokeRequired) 
     { 
      Func<DialogResult> m =() => MessageBox.Show(msg, caption, buttons); 
      return (DialogResult)Invoke(m); 
     } 
     else 
     { 
      return MessageBox.Show(msg, caption, buttons); 
     } 
    } 
+3

請注意,在這裏發佈代碼而不是圖片被認爲是最佳做法。根據您已有的代碼,以這種方式創建正確的代碼示例會更容易。 – driis

回答

12

這是因爲當InvokeRequired是真的,你一次次給完全相同的方法。您需要使用Invoke才能使方法計劃在UI線程上運行。在這種情況下,InvokeRequired將爲false,並且您的代碼將運行到您實際顯示該對話框的if分支。

更改代碼沿着線的東西:

if(InvokeRequired) 
{ 
    Func<DialogResult> showMsg =() => ShowMessage(msg, caption, buttons); 
    return (DialogResult)Invoke(showMsg); 
} 
+1

您需要將委託類型更改爲'Func '或類似的。 – Ani

+1

@Ani,好點,固定。 – driis

4

你得到一個計算器,因爲ShowMessage方法是停留在一個不定式循環,因爲它一遍又一遍,當「InvokeRequired」

自稱