在C#中调用和委托

时间:2011-09-26 07:56:02

标签: c# winforms delegates invoke

有人可以解释这段代码中的语法吗?

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

我正在使用需要更新部分UI的后台工作者,因此我使用了它。它有效,但我不知道空()和=>的意思。

3 个答案:

答案 0 :(得分:1)

()和=>是lambda expression

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>的委托,它在代码块中有两个引用i和j的int参数,并返回一个字符串。

等等...

答案 1 :(得分:1)

() =>引入了lambda expression

如果lambda表达式接收到参数,那么它们将列在括号内。你的lambda相当于

void foo()
{
    ...
}

答案 2 :(得分:1)

表示Lambda eExpression。 epmty括号表示它不接受任何参数。

虽然这个片段似乎缺少某些内容,但不要认为它会编译。 w ^

hat Invoke会调用UI线程。当您进行处理时,您希望在后台线程上执行此操作,并且只对UI线程进行短暂调用。这样你就可以保持UI响应。

因此,这个snippts将一项工作(将项目添加到Combobox)传递给UI线程以完成它。后台线程无法直接在UI线程上执行操作。

关心GJ