Вызывает и делегатов в C # - PullRequest
       27

Вызывает и делегатов в C #

3 голосов
/ 26 сентября 2011

Может кто-нибудь объяснить синтаксис в этом блоке кода?

Invoke((MethodInvoker)
    (
        () => 
        {
            checkedListBox1.Items.RemoveAt(i);
            checkedListBox1.Items.Insert(i, temp);
            checkedListBox1.Update();
        }
    )
);

Я использую фоновый работник, который должен обновить части пользовательского интерфейса, поэтому я использовал это.Это работает, но я не знаю, что означают empty () и =>.

Ответы [ 3 ]

1 голос
/ 26 сентября 2011

() => вводит лямбда-выражение .

Если лямбда-выражение получит параметры, они будут перечислены в скобках. Ваша лямбда эквивалентна

void foo()
{
    ...
}
1 голос
/ 26 сентября 2011

, что лямбда-выражение .Скобки epmty означают, что он не принимает никаких параметров.

Хотя этот фрагмент выглядит так, как будто чего-то не хватает, не думайте, что он компилируется.W

, что делает Invoke, вызывает поток пользовательского интерфейса.Когда вы выполняете обработку, вы хотите сделать это в фоновом потоке и делать только короткие вызовы потока пользовательского интерфейса.Таким образом, вы сохраняете интерфейс отзывчивым.

Таким образом, этот фрагмент передает часть работы (добавление элементов в Combobox) в поток пользовательского интерфейса, чтобы сделать это.Фоновый поток не может напрямую выполнять действия в потоке пользовательского интерфейса.

С уважением GJ

1 голос
/ 26 сентября 2011

() и => является лямбда-выражением .

Action a = () => { 
    //code here
}

- делегат типа Action, который выполняет код в блоке.

Func<string> f = () => {
    //code here
    return "string";
}

является делегатом типа Func<string>, который выполняет код в блоке, а затем возвращает строку.

Func<int, int, string> f = (i, j) => {
    //code here
    return "string"+i+j;
}

- это делегат типа Func<int, int, string>, который имеет два параметра типа int, указанных в блоке кода для i и j, и возвращает строку.

Etc ...

...