Si vous utilisez action.BeginInvoke(), vous doivent appeler EndInvoke quelque part - sinon le cadre doit conserver le résultat de l'appel asynchrone sur le tas, ce qui entraîne une fuite de mémoire.
Si vous ne voulez pas passer à C# 5 avec les mots-clés async/await, vous pouvez simplement utiliser la bibliothèque Task Parallels dans .Net 4. C'est beaucoup, beaucoup plus agréable que d'utiliser BeginInvoke/EndInvoke, et cela donne un moyen propre de déclencher et d'oublier les tâches asynchrones :
using System.Threading.Tasks;
...
void Foo(){}
...
new Task(Foo).Start();
Si vous avez des méthodes à appeler qui prennent des paramètres, vous pouvez utiliser une lambda pour simplifier l'appel sans avoir à créer des délégués :
void Foo2(int x, string y)
{
return;
}
...
new Task(() => { Foo2(42, "life, the universe, and everything");}).Start();
Je suis à peu près sûr (mais je ne suis pas certain) que la syntaxe async/await de C# 5 n'est que du sucre syntaxique autour de la bibliothèque Task.