2017-02-17 1 views
2

Я пробовал несколько разных способов сделать это, и никто из них не работает. Мне нужно получить значение tabControl1.SelectedTab.Name. Если я пытаюсь следующий код:Получить tabControl SelectedTab из другого потока с помощью Invoke

string name = tabControl1.SelectedTab.Name; 

Я получаю сообщение об ошибке, что я неспособных получить доступ к объекту из другого потока. Поэтому теперь я пытаюсь использовать Invoke для извлечения значения. Один из способов, которые я нашел в Интернете и попытался, был следующим.

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

Это дает ошибку, объекта не задана ссылка на экземпляр объекта. Я пробовал несколько других методов, но это привело к нулевому результату.

Я попытался найти SO для ответа на этот вопрос, но не смог найти ничего, что сработало. Я был бы признателен за любую помощь или кто-то мог бы указать мне в правильном направлении. Благодаря!

+0

Вам необходимо создать и обработать объекты геометрии непосредственно в потоке пользовательского интерфейса. Любая выполняемая обработка потоков не может напрямую обращаться к объекту геометрии, которую они должны отправлять в поток, который их создал, - поток пользовательского интерфейса. –

ответ

2

Я думаю, что вы пытаетесь сделать следующее:

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

Это возвращает имя из SelectedTab из потока пользовательского интерфейса. С уважением.

+0

Спасибо. Это получилось отлично! – frostbyte

+0

Добро пожаловать! – darkvoid

Смежные вопросы