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

时间:2017-02-17 04:03:32

标签: c# multithreading winforms invoke

我已经尝试了几种不同的方法来实现这一点,但它们都没有工作。我需要获得 tabControl1.SelectedTab.Name 的值。如果我尝试以下代码:

string name = tabControl1.SelectedTab.Name;

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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