2009-10-11 72 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表單?

相關問題