2017-09-14 6 views
0

J'ai écrit un programme dans un modèle synchrone que je veux maintenant ajouter un filetage à des tâches longues, j'ai plusieurs propriétés qui permettent d'automatiser la récupération de certaines informations comme:Invoke Propriété

private int tabIdx { get { return tabs.SelectedIndex; } } 

private string tabName { get { return tabs.SelectedTab.Text; } } 

public TabControls TabControls { get { return (TabControls)tabs.TabPages[tabIdx].Controls[string.Format("tab_{0}_controls", tabIdx)]; } } 
internal TabControls getTabControls(string name) 
{ 
    int desiredIdx = tabs.TabPages.IndexOfKey(name); 
    return (TabControls)tabs.TabPages[desiredIdx].Controls[string.Format("tab_{0}_controls", desiredIdx)]; 
} 

public Core rCore { get { return rdbCores[tabIdx]; } } 

Il est évident que si je tente pour accéder à ces propriétés de l'intérieur Task.Run(()) ou de même, je vais obtenir une exception de thread-thread.

Donc, ma question est:

Est-il possible de Invoke ces propriétés avec une méthode similaire aussi:

private void invokeIfRequired(ISynchronizeInvoke obj, MethodInvoker action) 
{ 
    if (obj.InvokeRequired) { obj.Invoke(action, new object[0]); } 
    else { action(); } 
} 
+0

https://stackoverflow.com/a/45961869/17034 –

Répondre

0

En général, je l'utilise comme suit pour appeler des propriétés de différentes tâches. Je ne peux pas suivre votre code, wehre vous voulez appeler, donc vous devez régler le code à vos besoins d'application:

button1.Invoke(new Action(()=>button1.Visible = true;))