簡體   English   中英

有沒有辦法通過委托直接調用屬性設置器?

[英]Is there a way to directly invoke a property setter through a delegate?

我正在使用Windows窗體,並且很多時候已經碰到(據我所知)必須圍繞UI組件的屬性編寫包裝函數,以便可以通過調用它們的包裝器從另一個線程設置它們(屬性)。

但是,有一件事並沒有讓我休息。 屬性的設置者實際上不是自己運作的嗎? 如果它們是,可以在它們周圍形成一個委托而不求助於編寫包裝器,然后從另一個線程調用委托嗎?

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

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

我找不到這個問題的真正解決方案,但我明白了。 我自己有時需要它,但谷歌讓我失望。

例:

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM