在我的多線程應用程序中,我需要跨UI線程訪問UI元素,我使用線程安全方法來做到這一點。我在我的許多項目中反覆使用了這一點,並將它們保存在表單文件中,這使得文件看起來很難看。所以我想創建一個分離類,在那裏我可以把所有這些,並在需要時打電話給他們,但我有麻煩。對於instace改變控件的文本元素,我使用以下保持線程安全的UI訪問器在一個單獨的類在c#
delegate void SetTextCallback(string text, Control ctrl);
public void SetText(string text, Control ctrl)
{
if (ctrl.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text, ctrl });
}
else
{
if (ctrl.GetType() == typeof(Label))
{
ctrl.Text = text;
}
else
{
ctrl.Text += Environment.NewLine + text;
}
}
}
,並調用該函數作爲
SetText("some text",label1);
這工作得很好,如果它是在窗體類,如果我把它改成另一班我得到了一個錯誤在線
this.Invoke(d, new object[] { text, ctrl });
有人可以告訴我,我該如何做到這一點。
也有可能有一個UI訪問器方法做所有的東西,那就是現在我有像這樣的多種方法來改變文本之一來改變啓用的屬性之一來改變背景顏色和一個改變前面的顏色。是否有可能有類似
public void ChangePropert(Control ctrl,Property prop,Value val)
您能否確認您在調用時遇到的異常?我想它的通用線程異常解釋控制只能由它的所有者訪問。此外,請參閱有關屬性的反思,其中的問題將是類型安全。 – Smudge202 2011-05-23 08:34:38