2017-02-16 2 views
-1

J'ai une propriété qui peut être modifiée à partir d'une méthode avec Invoke() (à partir de thread) et d'autres sans invoke() dans la même classe. Que se passe-t-il si on les appelle dans le même moment?Juste une enquête, à propos de Invoke() dans le thread principal

C'est possible? Depuis peut affecter la condition dans une méthode.

Par exemple:

public class Test{ 
    public bool testBool { get; set; } 

    public void MethodWIthInvoke(){ 
     this.Invoke(new Action(() => 
     { 
      if (testBool) 
      { 
       testBool = false; 
      } 
     })); 
    } 

    public void Method(){ 
     if (testBool) 
     { 
      testBool = false; 
     } 
    } 
} 
+0

Tout ira bien tant que 'Method()' n'est appelé que depuis le thread UI. – itsme86

+0

Oui, 'Method()' n'est appelé que depuis le thread UI, que se passerait-il s'ils s'exécutaient en même temps? – Cristian18

+0

@ Cristian18 Ils ne peuvent pas, s'ils sont tous les deux exécutés à partir du même fil. Ça va faire l'un ou l'autre. – Servy

Répondre

-1

Je ne sais pas pourquoi avez-vous besoin de faire le code de cette façon, de toute façon, étant donné que les deux méthodes seront appelées du même fil alors il sera très bien. Je veux suggérer une autre façon d'écrire votre code comme suit:

public class Test{ 
public bool testBool { get; set; } 

public void Method() 
    { 
     if (this.InvokeRequired) 
     { 
      this.Invoke(new Action(() => 
      { 
       if (testBool) 
       { 
        testBool = false; 
       } 
      })); 
     } 
     else 
     { 
      if (testBool) 
      { 
       testBool = false; 
      } 
     } 
    } 
}