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.