2014-04-15 4 views
0

я не знаю, как объяснить, что, так вот мой код:this.Invoke броски не может преобразовать из «группы методов» до «» System.Delegate

this.Invoke(listBox1.Items.Add, new Object[] { e.Data.ToString() }); 

Но, все было бы хорошо, если у меня не будет никаких ошибок, но, к сожалению, у меня есть 2 ошибки:

Ошибка 1

Самый лучший перегруженный матча метод для «System.Windows.Forms.Control.Invoke (System.Delegate, Params object []) 'имеет некоторые недопустимые аргументы

Ошибка 2

Аргумент 1: не удается преобразовать из 'группы методов' к 'System.Delegate'

Что я должен сделать, чтобы преодолеть эти исключения?

+1

вы должны иметь отдельный метод для Invoke. –

ответ

8

Invoke требует, чтобы в качестве первого параметра использовался делегат . ListBox.Items.Add - это метод , а не делегат.

Вы можете, однако, использовать это:

this.Invoke((Action)delegate() 
{ 
    listBox1.Items.Add(e.Data.ToString()); 
}); 
+0

Здесь нет необходимости в анонимном методе (не добавляя его ни в какое другое); просто нужно передать соответствующему делегату. – Servy

5

Установка делегата для работы.

Invoke(new Action(() => 
{ 
    // Do it 
})); 
-1

Вы долбить проверить, т.е нужен контроль вызова, если это вызвать его:

if(listBox1.InvokeRequired) 
    listBox1.Invoke((Action)(()=> listBox1.Items.Add(e.Data.ToString())); //if e.Data is the object to add it to listBox! 
+0

Предположительно, он уже знает, что ему нужно вызвать, и не нужно проверять программно. Это также не решит ошибки во время компиляции. – Servy

+0

Servy прав, я уже знаю, что Invoke необходим :) – Mibac

Смежные вопросы