Нет перегрузки соответствует делегату - PullRequest
0 голосов
/ 06 сентября 2011

Благодаря вопросу, на который ранее был дан ответ на этом сайте, я создал небольшой блок кода.К сожалению, я получил ошибку, которую я не совсем понимаю.Вот блок кода:

        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[] { });

, но если я сделаю это, он просто скажет «Ожидается имя метода».Что я тут не так делаю?

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

MethodInvoker - делегат без параметров - у вас есть параметр.Два варианта:

  • Использование Action<string>:

    lbxServersThatAreUp.Invoke((Action<string>)AddTextToUpListBox,
                               new object[] { text });
    
  • Использование лямбда-выражения для создания MethodInvoker:

    MethodInvoker invoker = () => AddTextToUpListBox(text);
    lbxServersThatAreUp.Invoke(invoker);
    
0 голосов
/ 06 сентября 2011
private void AddTextToUpListBox(string text)
{
    if (lbxServersThatAreUp.InvokeRequired)
    {
        lbxServersThatAreUp.Invoke((Action<String>)AddTextToUpListBox, new object[] { text});
        return;
    }

    lbxServersThatAreUp.Items.Add(text);
}

Вам необходимо передать параметры для метода, вы также должны иметь возможность передавать метод непосредственно как делегат.

...