GUI控件上的线程访问

本文关键字:线程 访问 控件 GUI | 更新日期: 2023-09-27 18:03:44

我的主题就是这个问题。我知道线程访问GUI控件有局限性。似乎从主线程以外的另一个线程在控件中写入/设置某些内容是不可能的。

但是,例如,当我试图读取一个复选框是否被选中,它的工作。阅读组合框的文本不会。

我正在使用windows窗体与。net框架4。

谁能告诉我线程的限制在哪里?

GUI控件上的线程访问

你可以调用一个操作来做一些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对象?