0
我有一个PropertyGrid设置另一个窗体上控件的控件的属性。但是对于诸如“位置”和“文本”之类的东西,我会遇到一个交叉线程问题。C#使用PropertyGrid控件来更改控件属性“ThreadSafe”
有没有一种简单的方法来安全地(不使用AllowIlligalCrossThread =真)让发生与物业电网这些属性的设置?
谢谢。
我有一个PropertyGrid设置另一个窗体上控件的控件的属性。但是对于诸如“位置”和“文本”之类的东西,我会遇到一个交叉线程问题。C#使用PropertyGrid控件来更改控件属性“ThreadSafe”
有没有一种简单的方法来安全地(不使用AllowIlligalCrossThread =真)让发生与物业电网这些属性的设置?
谢谢。
你可以创建一个派生子类覆盖性能和用途援引了“线程安全”的方式来设置属性。
class DerivedLabel : Label
{
public override string Text
{
get
{
return Invoke(new Func<string>(GetText)) as string;
}
set
{
Invoke(new Action<string>(SetText), value);
}
}
private void SetText(string text)
{
base.Text = text;
}
private string GetText()
{
return base.Text;
}
}
的invoke()中运行你通过创建控件在同一线程上的委托,所以它隐含线程安全的。但是,如果你有很多需要继承的控件,这可能是很多工作。
如果两个控件都是在同一个线程上创建的(对Windows应用程序来说是正常的),那么您应该不会得到这些异常。您是否出于某种原因在其他线程上创建PropertyGrid表单?