2009-10-11 75 views
0

我有一个PropertyGrid设置另一个窗体上控件的控件的属性。但是对于诸如“位置”和“文本”之类的东西,我会遇到一个交叉线程问题。C#使用PropertyGrid控件来更改控件属性“ThreadSafe”

有没有一种简单的方法来安全地(不使用AllowIlligalCrossThread =真)让发生与物业电网这些属性的设置?

谢谢。

回答

0

你可以创建一个派生子类覆盖性能和用途援引了“线程安全”的方式来设置属性。

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表单?

相关问题