Je crois avoir une méthode propre pour passager des arguments et une variable de retour dans le cadre de l'utilsiation d'un SynchronizationContext. Pour ce faire, je passe un objet à la méthode Post. Celui-ci contient l'ensemble des variables (arguments et retour).
Classe data :
public class ClassData { public Boolean Retour{get;set;} public String Argument1{get;set;} public String Argument2{get;set;} }
et la méthode utiliserait les arguments passés par cet objet et modifie la propriété de retour, ce qui donne :
public class Class1 { private SynchronizationContext _context; /// <summary> /// Constructeur /// </summary> public Class1() { // Mémorisation du context _context = SynchronizationContext.Current; } /// <summary> /// Lancement de la méthode hors context /// </summary> public Boolean DoWork() { // Test si on a un context (juste par prudence) if (_context != null) { ClassData data = new ClassData(); // Appel de la méthode via le context _context.Post(Work, data); return data.Retour; } } /// <summary> /// Méthode que l'on souhaite proteger via SynchronizationContext /// </summary> /// <param name="data"></param> private void Work(Object obj) { ClassData data = obj as ClassData; // Faire le job data.Retour = true; } }
C'est propre et simple, pas de variables à gogo.