[C#] Thread-Safe facile avec SynchronizationContext

Publié le 03 octobre 2008 par Jeremy.jeanson

Voici un petit code qui explique simplement l'utilisation du SynchronizationContext pour obtenir un code Thread-safe.

using System;
using System.Threading;

namespace WindowsFormsApplication1
{
    /// <summary>
    /// Classe métier qui a besoin d'avoir des appels avec SynchronizationContext
    /// </summary>
    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 void DoWork()
        {
            // Test si on a un context (juste par prudence)
            if (_context != null)
            {
                // Appel de la méthode via le context
                _context.Post(Work, null);
            }
        }

        /// <summary>
        /// Méthode que l'on souhaite proteger via SynchronizationContext
        /// </summary>
        /// <param name="data"></param>
        private void Work(Object data)
        {
            // Faire le job
        }
    }
}