繁体   English   中英

C#2.0泛型:如何使用零参数创建Action对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM