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
}
}
}