我有以下代码,可以以线程安全的方式设置属性(改编自这个SO问题),但我不能适应它来获取属性。
这是我线程安全的设置属性的代码。
通过以下方式调用:
这是我尝试以线程安全的方式编写获取属性的代码。
这是我线程安全的设置属性的代码。
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);