2

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

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

我正在使用带有 .net 框架 4 的 Windows 窗体。

有人能告诉我线程的限制在哪里吗?

4

3 回答 3

1

每当您访问 UI 元素时,您都必须在UI 线程上。您观察到的内容不取决于控件是复选框还是下拉列表,而是您从哪个线程访问。

Windows 窗体控件提供Invoke方法调度对 UI 线程的调用。还有一个async BeginInvoke。异步调用可能会加速您的系统(取决于您的设计)。

WPF中有一篇关于Dispatcher的文章:Build More Responsive Apps With The Dispatcher

于 2013-03-12T15:26:36.533 回答
1

您可以调用一个操作来使用 UI 执行某些操作,但仅当您需要从工作线程访问某些内容时才需要它。

void UpdateMessage (string message)
{
  Action action = () => txtMessage.Text = message;
  this.Invoke (action);
}

这是一个关于线程的非常好的资源

于 2013-03-12T15:32:22.047 回答
0

UI 元素只能在 UI 线程上更新 - 您可以检查是否需要调用来让您知道您是否在另一个线程上。

这是一个类似的问题,您可能会喜欢GUI 对象何时需要调用?

于 2013-03-12T15:28:07.500 回答