GUI控件上的线程访问
本文关键字:线程 访问 控件 GUI | 更新日期: 2023-09-27 18:03:44
我的主题就是这个问题。我知道线程访问GUI控件有局限性。似乎从主线程以外的另一个线程在控件中写入/设置某些内容是不可能的。
但是,例如,当我试图读取一个复选框是否被选中,它的工作。阅读组合框的文本不会。
我正在使用windows窗体与。net框架4。
谁能告诉我线程的限制在哪里?
你可以调用一个操作来做一些UI的事情,但是只有当你需要从你的工作线程访问一些东西时才需要它。
void UpdateMessage (string message)
{
Action action = () => txtMessage.Text = message;
this.Invoke (action);
}
这是一个很好的关于线程的资源
当你访问UI元素时,你必须在UI线程。你所观察到的并不取决于控件是复选框还是下拉框,而是取决于你正在访问哪个线程。
Windows窗体控件提供Invoke
方法调度调用UI线程。还有一个async BeginInvoke
。异步调用可能会加快您的系统(取决于您的设计)。
在WPF中有一篇关于Dispatcher的文章:使用Dispatcher构建响应更快的应用
UI元素只能在UI线程上更新——你可以检查调用是否需要让你知道你是否在另一个线程上。
这里有一个类似的问题,你可能喜欢何时调用GUI对象?