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