如何解决从其他线程访问Ui控件
所以我想从另一个线程中另一个类的静态方法访问我的主要形式的标签
我该怎么做?
顺便说一句,我用这段代码来启动线程
new Thread(new ThreadStart(WebHelper.Check)).Start();
解决方法
只能通过UI线程更改UI。如果线程与表单位于同一类中,则可以使用Control.Invoke方法访问UI线程。
this.Invoke(new Action(() => {
//UI Code here
}));
但是,如果要从另一个类访问它,我建议使用events访问UI的类,然后可以使用Invoke。
//This would be in your class
public delegate void UIStuff(string text);
class AClass
{
public static event UIStuff ChangeLabel;
public static void StaticFunction() {
ChangeLabel.Invoke("Test");
}
}
//This would be your form class
public partial class Form1 : Form
{
public Form1(){
AClass.ChangeLabel += AClass_ChangeLabel; //Note you can press tab for auto complete
}
AClass_ChangeLabel(string text) {
this.Invoke(new Action(() => {
this.MainLabel = text;
}));
}
}
注意:我相信您也可以通过在静态方法Form1 f1 = new Form1();
中创建新实例来更改标签,但是我不认为这就是您想要的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。