C#泛型2.0:如何创建一个Action对象与零个参数(C# 2.0 generics: How t

2019-06-26 07:42发布

首先,我使用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[] { "" });

然而,它只是似乎很奇怪,我认为我必须用一个类型参数(尤其是因为我不打算传递任何参数)定义的操作对象! 不知怎的,删除这个参数也将使空的新的对象[]过时了,这是我想要的。

谁能帮我简化上述电话吗?

最后,它保证的BeginInvoke将在以后的SelectedIndexChanged完成,因此更新正确的文本组合框” Text属性?

我会很感激学习这些问题的答案。

Answer 1:

我不认为没有行动是参数在.NET 2.0不用担心可用 - 只需使用一个不同的预定义的委托类型。 MethodInvoker应该做的工作(不带参数无效方法)。

另外,BeginInvoke的有2个重载 - 一个取代表,和一个取对象的代表和阵列。

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


Answer 2:

你可以定义自己的行动代表。

delegate void Action()

我看不出哪个你调用BeginInvoke的对象,但如果是同一个线程组合框上创建一个UI控件,您通过委托担保SelectedIndexChanged事件处理程序完成后要调用一段时间。



文章来源: C# 2.0 generics: How to create an Action object with zero parameters