C# 在C中调用和委托#

C# 在C中调用和委托#,c#,winforms,delegates,invoke,C#,Winforms,Delegates,Invoke,有人能解释一下这段代码的语法吗 Invoke((MethodInvoker) ( () => { checkedListBox1.Items.RemoveAt(i); checkedListBox1.Items.Insert(i, temp); checkedListBox1.Update(); } ) ); 我正在使用backgroundworker

有人能解释一下这段代码的语法吗

Invoke((MethodInvoker)
    (
        () => 
        {
            checkedListBox1.Items.RemoveAt(i);
            checkedListBox1.Items.Insert(i, temp);
            checkedListBox1.Update();
        }
    )
);
我正在使用backgroundworker,它需要更新部分UI,所以我使用了这个。它可以工作,但我不知道空的()和=>是什么意思。

()和=>是一个

是类型为
Action
的委托,它执行块中的代码

Func<string> f = () => {
    //code here
    return "string";
}
Func f=()=>{
//代码在这里
返回“字符串”;
}
Func
类型的委托,它执行块中的代码,然后返回字符串

Func<int, int, string> f = (i, j) => {
    //code here
    return "string"+i+j;
}
Func f=(i,j)=>{
//代码在这里
返回“字符串”+i+j;
}
是一个类型为
Func
的委托,它在代码块中有两个引用i和j的int参数,并返回一个字符串

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

()=>
引入了一个

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

void foo()
{
    ...
}
那真是个好主意。epmty括号表示它不接受任何参数

尽管这段代码似乎遗漏了一些东西,但不要认为它可以编译。W

调用的作用是调用UI线程。当您执行处理时,您希望在后台线程上执行该操作,并且只对UI线程进行短期调用。这样您就可以保持UI的响应性

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


关于GJ

你应该读这篇文章-