在我的多线程应用程序中,我需要跨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