[英]C# 2.0 generics: How to create an Action object with zero parameters
首先,我正在使用VS2005和C#2.0。
我正在尝试从SelectedIndexChanged事件内部设置组合框的Text属性。 在StackOverflow上的另一个线程中 ,提出了以下方法:
BeginInvoke(new Action(() => someCombobox.Text = "x" ));
现在,首先,这为我返回了一个编译器错误。 我认为这是因为Action对象在两种语言规范中的行为有所不同。 在C#2.0中,Action对象似乎在所有声明中都需要<T>
结构。 也许我错了,但我想澄清一下。
起作用的是以下内容:
BeginInvoke(new Action<string>( delegate { someCombobox.Text = "x"; }), new object[] { "" });
但是,对我来说似乎很奇怪,我必须使用类型参数来定义Action对象(尤其是因为我不打算传递任何参数)! 以某种方式删除此参数还会使空的new object []过时,这正是我想要的。
谁能帮我简化上述电话?
最后,是否可以确保BeginInvoke将在SelectedIndexChanged之后完成,从而用正确的文本更新组合框的Text属性?
我非常感谢您学习这些问题的答案。
我认为.NET 2.0中不提供没有参数的操作。不用担心-只需使用其他预定义的委托类型。 MethodInvoker应该执行此工作(无参数的空方法)。
另外,BeginInvoke有2个重载-一个重载接受委托,一个重载接受委托和对象数组。
BeginInvoke(new MethodInvoker(delegate()
{
someCombobox.Text = "x";
}));
您可以定义自己的Action委托。
delegate void Action()
我看不到要在其上调用BeginInvoke的对象,但是如果它是在与组合框相同的线程上创建的UI控件,则可以确保在SelectedIndexChanged事件处理程序完成后的某个时间调用您传递的委托。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.