2011-09-26 34 views
3

有人可以解释这段代码中的语法吗?C#中的调用和代表

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

我正在使用一个backgroundworker需要更新部分的UI,所以我用这个。它可以工作,但我不知道empty()和=>是什么意思。

+0

你应该看看这篇文章 - http://msdn.microsoft.com/en-us/library/bb397687.aspx –

回答

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

() =>引入了lambda expression

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

void foo() 
{ 
    ... 
} 
1

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

虽然这段代码看起来像是缺少了一些东西,但不要认为它会被编译。 W

帽子Invoke does调用UI线程。在进行处理时,您希望在后台线程上执行该操作,并仅对UI线程进行简短调用。这样你可以保持UI的响应。

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

问候GJ