2017-02-17 1 views
2

J'ai essayé plusieurs méthodes différentes pour cela, et aucune d'entre elles ne fonctionne. Je dois obtenir la valeur de tabControl1.SelectedTab.Name. Si je tente le code suivant:Obtient tabControl SelectedTab à partir d'un autre thread à l'aide de l'invocation

string name = tabControl1.SelectedTab.Name; 

Je reçois une erreur que je suis incapable d'accéder objet à partir d'un autre thread. Alors maintenant j'essaie d'utiliser Invoke pour récupérer la valeur. L'un des moyens que j'ai trouvés en ligne et essayé était le suivant.

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

Cela donne l'erreur, référence d'objet non définie à une instance d'un objet. J'ai essayé quelques autres méthodes, mais celles-ci ont abouti à un résultat nul.

J'ai essayé de chercher à travers SO pour une réponse à cela, mais je n'ai rien trouvé qui fonctionne. J'apprécierais toute aide ou si quelqu'un pourrait me diriger dans la bonne direction. Merci!

+0

Vous devez créer et manipuler vos objets de géométrie directement sur le thread de l'interface utilisateur. Tout traitement de thread que vous effectuez ne peut pas accéder directement à l'objet géométrique, il doit être envoyé au thread qui les a créés: le thread de l'interface utilisateur. –

Répondre

2

Je pense que vous essayez de faire ce qui suit:

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

Cela renverra le nom du selectedTab du thread d'interface utilisateur. Cordialement.

+0

Merci. Cela a fonctionné parfaitement! – frostbyte

+0

De rien! – darkvoid