3

InvokeRequired の実行中に stackverflow エラーが発生します。

System.StackOverflowException は処理されませんでした

ここに画像の説明を入力

修正方法は?詳細を表示する情報はありません。

修正版:

    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);
        }
    }
4

2 に答える 2

13

が true の場合InvokeRequired、まったく同じメソッドを何度も呼び出すためです。InvokeUI スレッドで実行するようにスケジュールされたメソッドを取得するには、を使用する必要があります。この場合、InvokeRequiredは false になり、コードはif実際にダイアログを表示するブランチに実行されます。

コードを次の行に沿って変更します。

if(InvokeRequired) 
{
    Func<DialogResult> showMsg = () => ShowMessage(msg, caption, buttons);
    return (DialogResult)Invoke(showMsg);
}
于 2011-11-06T12:16:11.657 に答える
4

"InvokeRequired" のときに自分自身を何度も呼び出すため、ShowMessage メソッドが無限ループに陥っているため、スタック オーバーフローが発生しています。

于 2011-11-06T12:16:37.530 に答える