C#2.0generics:如何创建零参数的Action对象

首先,我使用的是VS2005和C#2.0。

我正在尝试从SelectedIndexChanged事件中设置一个combobox’Text属性。 从StackOverflow上的另一个线程开始,提出了以下方法:

BeginInvoke(new Action(() => someCombobox.Text = "x" )); 

现在,首先,这将为我返回编译器错误。 我相信这是因为Action对象在两种语言规范中表现不同。 在C#2.0中,Action对象似乎在所有声明中都需要结构。 也许我错了,但我想澄清一下。

工作如下:

 BeginInvoke(new Action( delegate { someCombobox.Text = "x"; }), new object[] { "" }); 

但是,我似乎很奇怪,我必须使用类型参数定义Action对象(特别是因为我不打算传递任何参数)! 以某种方式删除此参数也会使空的新对象[]过时,这就是我想要的。

任何人都可以帮我简化上述电话吗?

最后,是否保证BeginInvoke将在SelectedIndexChanged之后完成,从而使用正确的文本更新combobox’Text属性?

我真的很感激能够学习这些问题的答案。

我不认为.NET 2.0中没有参数的Action没有后顾之忧 – 只需使用不同的预定义委托类型。 MethodInvoker应该完成这项工作(没有参数的void方法)。

此外,BeginInvoke有2个重载 – 一个接受委托,另一个接受委托和对象数组。

 BeginInvoke(new MethodInvoker(delegate() { someCombobox.Text = "x"; })); 

您可以定义自己的Action委托。

delegate void Action()

我无法看到您正在调用BeginInvoke的对象,但如果它是在与combobox相同的线程上创建的UI控件,则保证在SelectedIndexChanged事件处理程序完成后的某个时间调用您传递的委托。