2010-04-21 7 views
1

Où est la documentation sur le traitement des arguments de BeginInvoke?Arguments pour delegate.BeginInvoke sont des copies ou des références?

Si j'ai un délégué (qui encapsule ma fonction gestionnaire) qui accepte un objet en tant que paramètre, cet objet est-il copié ou référencé par la fonction gestionnaire asynchrone?

delegate void MyDelegate(SomeObject obj); 

// later on: 
// invoke the delegate async'ly: 
new MyDelegate(StaticClass.HandlerFunc).BeginInvoke(objInstance, null, null); 
// alter the object: 
objInstance.SomeProperty = newValue; 

// function: 
public static void HandlerFunc(SomeObject obj) { 
    // is it a possible race condition to read SomeProperty: 
    if(obj.SomeProperty == oldValue) { 
     // will possibly never enter? 
    } 
    // ... etc. 
} 

Répondre

1

La méthode obtient une référence à l'objet.

Les objets ne sont pas copiés dans .NET, sauf si vous créez spécifiquement une copie.

Questions connexes