我正在使用Windows Forms,并且很多时候已经碰到(据我所知)必须围绕UI组件的属性编写包装函数,以便可以通过调用从另一个线程设置它们(属性)他们的包装。
然而,有一件事并没有让我休息。属性的设置者实际上不是自己运作的吗?如果它们是,可以在它们周围形成一个委托,而不需要编写包装器,然后从另一个线程调用委托吗?
答案 0 :(得分:4)
是的,这是可能的。使用PropertyInfo.GetSetMethod
函数检索属性的set访问器,然后创建一个委托来调用它。
或者甚至更简单,您可以使用PropertyInfo.SetValue
函数直接设置值。
答案 1 :(得分:3)
我找不到这个问题的真正的解决方案,但我弄明白了。我自己有时需要它,但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;
}
}