簡體   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