0

このウェブサイトで以前に回答された質問のおかげで、私はコードの小さなブロックを構築しました。残念ながら、よくわからないエラーが発生しています。コードのブロックは次のとおりです。

        private void AddTextToUpListBox(string text)
    {
        if (lbxServersThatAreUp.InvokeRequired)
        {
            lbxServersThatAreUp.Invoke(new MethodInvoker(AddTextToUpListBox), new object[] { });
            return;
        }

        lbxServersThatAreUp.Items.Add(text);
    }

私が得ているエラーは、「'AddTextToUpListBox'のオーバーロードがデリゲート'System.Windows.Forms.MethodInvoker'と一致します」です。

そこで、次の行を次のように変更してみました。

lbxServersThatAreUp.Invoke(new MethodInvoker(AddTextToUpListBox(text)), new object[] { });

しかし、そうすると、「メソッド名が必要です」とだけ表示されます。私はここで何が間違っているのですか?

4

2 に答える 2

2

MethodInvokerパラメーターのないデリゲートです-パラメーターあります。2 つのオプション:

  • 次を使用しAction<string>ます。

    lbxServersThatAreUp.Invoke((Action<string>)AddTextToUpListBox,
                               new object[] { text });
    
  • ラムダ式を使用して次を作成しますMethodInvoker

    MethodInvoker invoker = () => AddTextToUpListBox(text);
    lbxServersThatAreUp.Invoke(invoker);
    
于 2011-09-06T19:50:41.110 に答える
0
private void AddTextToUpListBox(string text)
{
    if (lbxServersThatAreUp.InvokeRequired)
    {
        lbxServersThatAreUp.Invoke((Action<String>)AddTextToUpListBox, new object[] { text});
        return;
    }

    lbxServersThatAreUp.Items.Add(text);
}

メソッドのパラメーターを渡す必要があります。メソッドをデリゲートとして直接渡すこともできます。

于 2011-09-06T19:48:25.773 に答える