我正在使用Windows窗體,並且很多時候都碰到了(據我瞭解)需要圍繞UI組件的屬性編寫包裝函數,以便可以通過調用它們(屬性)從另一個線程設置它們包裝。有沒有辦法通過委託直接調用屬性setter?
但是,有一件事並沒有給我休息。不是屬性的setter實際上是自己的功能?如果是的話,是否可以在他們周圍組建代表而不訴諸寫包裝,然後從另一個線程調用委託?
我正在使用Windows窗體,並且很多時候都碰到了(據我瞭解)需要圍繞UI組件的屬性編寫包裝函數,以便可以通過調用它們(屬性)從另一個線程設置它們包裝。有沒有辦法通過委託直接調用屬性setter?
但是,有一件事並沒有給我休息。不是屬性的setter實際上是自己的功能?如果是的話,是否可以在他們周圍組建代表而不訴諸寫包裝,然後從另一個線程調用委託?
是的,這是可能的。使用PropertyInfo.GetSetMethod
函數檢索該屬性的set訪問器,然後創建一個委託來調用它。
或者甚至更簡單,但您可以使用PropertyInfo.SetValue
函數直接設置值。
我找不到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;
}
}
謝謝。使用反射的想法從來沒有在我身上發現過。 – Srv19 2011-05-16 11:27:36
有沒有什麼辦法可以做到這一點,_not_不涉及使用反射? – pyon 2011-06-28 18:45:29
@EduardoLeón看到我的答案,並且有很好的答案和很好的代碼示例,但總是很難找到:( – Bitterblue 2014-10-13 16:18:35