Есть ли способ напрямую вызывать установщик свойств через делегата? - PullRequest
5 голосов
/ 16 мая 2011

Я работаю с Windows Forms, и много раз сталкивался (как я понял) с необходимостью писать функции обтекания вокруг свойств компонентов пользовательского интерфейса, чтобы их (свойства) можно было устанавливать из другого потока, вызываяих обертки.

Однако, одна вещь не дает мне покоя.Разве установщики свойств сами не функционируют?Если это так, может ли вокруг них сформироваться делегат, не прибегая к написанию оболочек, и затем сказать, что делегат вызывается из другого потока?

Ответы [ 2 ]

4 голосов
/ 16 мая 2011

Да, это возможно.Используйте функцию PropertyInfo.GetSetMethod, чтобы получить установленный метод доступа для свойства, а затем создайте делегат для его вызова.

Или еще проще, вы можете использовать PropertyInfo.SetValue* Функция 1008 * для непосредственной установки значения.

3 голосов
/ 13 октября 2014

Я не могу найти реальное решение для этого вопроса, но я понял это.Иногда мне это нужно самому, но 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;
    }
}
...