使用 Invoke 从另一个线程获取 tabControl SelectedTab

Posted

技术标签:

【中文标题】使用 Invoke 从另一个线程获取 tabControl SelectedTab【英文标题】:Get tabControl SelectedTab From Another Thread Using Invoke 【发布时间】:2017-07-06 11:07:47 【问题描述】:

我尝试了几种不同的方法来实现这一点,但都没有奏效。我需要获取 tabControl1.SelectedTab.Name 的值。如果我尝试以下代码:

string name = tabControl1.SelectedTab.Name;

我收到一个错误,我 无法从另一个线程访问对象。所以现在我正在尝试使用 Invoke 来检索值。我在网上找到并尝试过的方法之一如下。

string name = tabControl1.Invoke((MethodInvoker)delegate  Text = tabControl1.SelectedTab.Name; )).ToString();

这给出了错误,对象引用未设置为对象的实例。我尝试了其他一些方法,但结果为空。

我尝试通过 SO 搜索此问题的答案,但找不到任何有效的方法。如果有人能指出我正确的方向,我将不胜感激。谢谢!

【问题讨论】:

您需要直接在 UI 线程上创建和操作几何对象。您执行的任何线程处理都无法直接访问几何对象,必须将它们分派到创建它们的线程 - UI 线程。 【参考方案1】:

我认为您正在尝试执行以下操作:

string tab = (string)this.Invoke(new Func<string>(() => controlTab1.SelectedTab.Name));

这将从 UI 线程返回 SelectedTab 的名称。问候。

【讨论】:

以上是关于使用 Invoke 从另一个线程获取 tabControl SelectedTab的主要内容,如果未能解决你的问题,请参考以下文章

关于Invoke和InvokeRequired

c#使用这个是安全的吗?Invoke?

来自 CreateWindow/CreateDialog 的 HWND 可以从另一个线程获取消息吗?

.NET WPF (C#) 我无法从另一个线程获取更改背景的按钮

如何从另一个调用 Capistrano 任务?

WinForms线程间修改