2011-05-16 99 views
4

我正在使用Windows窗體,並且很多時候都碰到了(據我瞭解)需要圍繞UI組件的屬性編寫包裝函數,以便可以通過調用它們(屬性)從另一個線程設置它們包裝。有沒有辦法通過委託直接調用屬性setter?

但是,有一件事並沒有給我休息。不是屬性的setter實際上是自己的功能?如果是的話,是否可以在他們周圍組建代表而不訴諸寫包裝,然後從另一個線程調用委託?

回答

3

是的,這是可能的。使用PropertyInfo.GetSetMethod函數檢索該屬性的set訪問器,然後創建一個委託來調用它。

或者甚至更簡單,但您可以使用PropertyInfo.SetValue函數直接設置值。

+0

謝謝。使用反射的想法從來沒有在我身上發現過。 – Srv19 2011-05-16 11:27:36

+2

有沒有什麼辦法可以做到這一點,_not_不涉及使用反射? – pyon 2011-06-28 18:45:29

+0

@EduardoLeón看到我的答案,並且有很好的答案和很好的代碼示例,但總是很難找到:( – Bitterblue 2014-10-13 16:18:35

2

我找不到real這個問題的解決方案,但我想通了。我有時自己需要它,但Google讓我失望。

例子:

public string Blah 
{ 
    get 
    { 
     if (InvokeRequired) 
      return (string) Invoke(new Func<string>(() => Blah)); 
     else 
      return Text; 
    } 
    set 
    { 
     if (InvokeRequired) 
      Invoke(new Action(() => { Blah = value; })); 
     else 
      Text = value; 
    } 
} 
+1

這不是我要求的,我想(1)拿一個現有的財產,(2)*提取*吸引力和/或設置者作爲獨立的代表,物業內部的聰明*內容*將幫助我實現這個目標,真正的工作必須在財產的外部*完成 – pyon 2014-10-13 16:22:57

+0

那麼,總會有老式的定義getter和setter,然後(如果你想要語法糖)在屬性定義中調用它們。 乞丐不能選擇器,我猜 – Srv19 2014-10-13 19:55:54

+0

儘管如此,我贏得了'原始問題'的幫助。 – Srv19 2014-10-13 19:56:48