[C#] Méthode SynchronizationContext Post() + arguments + retour

Publié le 07 octobre 2008 par Jeremy.jeanson

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.