C#中的调用和委托

3
有人能解释一下这段代码块中的语法吗?
Invoke((MethodInvoker)
    (
        () => 
        {
            checkedListBox1.Items.RemoveAt(i);
            checkedListBox1.Items.Insert(i, temp);
            checkedListBox1.Update();
        }
    )
);

我正在使用一个后台工作者(BackgroundWorker),需要更新UI的部分,因此我使用了这个。它可以运行,但我不知道空括号()和=>的意思。


你应该阅读这篇文章 - http://msdn.microsoft.com/zh-cn/library/bb397687.aspx - Lonli-Lokli
3个回答

1

() 和 => 是lambda表达式

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,并返回一个字符串。

等等...


1

() =>引入了一个lambda表达式

如果lambda表达式接收参数,则它们将列在括号内。您的lambda表达式等同于

void foo()
{
    ...
}

1

这是一个 Lambda方法, 空括号表示它不接受任何参数。

尽管这个片段看起来好像缺少某些东西,但不要认为它会编译通过。Invoke的作用是调用UI线程。当您进行处理时,希望在后台线程上进行处理,并仅对UI线程进行短暂的调用。这样可以保持UI的响应性。

因此,这个片段将一个工作任务(向Combobox添加项目)传递给UI线程来完成。后台线程不能直接在UI线程上执行操作。

敬礼,GJ


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接