У меня есть следующий код, который я использовал для установки свойств потокобезопасным способом (адаптировано из этого другого SO вопроса , но я не могу адаптировать его для получения свойства.
Это мое свойство set в поточно-ориентированном коде.
public static void SetPropertyThreadSafe(this TControl self, Action setter)
where TControl : Control
{
if (self.InvokeRequired)
{
var invoker = (Action)(() => setter(self));
self.Invoke(invoker);
}
else
{
setter(self);
}
}
Что вызывается следующим образом:
this.lblNameField.SetPropertyThreadSafe(p => p.Text = "Name:");
Это моя попытка получить свойство в поточно-ориентированном коде.
public static TResult GetPropertyThreadSafe(this TControl self, Func getter)
where TControl : Control
{
if (self.InvokeRequired)
{
var invoker = (Func)((TControl control) => getter(self));
return (TResult)self.Invoke(invoker);
}
else
{
return getter(self);
}
}
Это не работает. Надеюсь, я хотел бы позвонить, выполнив следующее:
string name = this.lblNameField.GetPropertyThreadSafe(p => p.Text);