4
我有以下代碼,我一直在使用線程安全方式設置屬性(改編自this other SO question,但我無法調整它以獲取屬性。Winforms - 以線程安全方式更新屬性的最簡單方法
這是線程安全的方式代碼我一套物業
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:");
這是我的以線程安全方式代碼嘗試get屬性。
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);