Аргументы для Invoke()
включают делегата и аргументы, переданные этому делегату.Вы пытаетесь передать делегат FindInRichTextBoxMethod
, но этот тип делегата принимает три аргумента.Вам необходимо:
- создать делегат с вашим методом
FindInRichTextBox
, а затем - передать параметры этому делегату.
Что-то вродеэто:
var finder = new FindInRichTextBoxMethod(FindInRichTextBox);
object find = Invoke(finder, new object[] { list, tempState, len });
Другой путь - пройти через замыкание, как будто вы пытаетесь в своем примере.В вашем случае ошибка связана с приведением к FindInRichTextBoxMethod
, поэтому Invoke ожидает аргументы.Вместо этого вы можете игнорировать приведение и передачу анонимного делегата, например:
var find = Invoke(delegate { return FindInRichTextBox(list, tempState, len); });
Это не сработает, потому что компилятор не может точно определить, что вы хотите сделать с этим анонимным делегатом.,Точно так же лямбда не может быть автоматически преобразована:
var find = Invoke(() => FindInRichTextBox(list, tempState, len));
Чтобы узнать, как и как решить проблему, прочитайте Почему должно быть приведено лямбда-выражение, если оно передано в виде простого параметра Delegate .