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