Utilisation de Process avec using block

Dupliquer possible:
Que se passe-t-il si je ne ferme pas un System.Diagnostics.Process dans mon application console C #?

Comme System.Diagnostics.Process hérite de Component qui implémente IDisposable , devrais-je toujours créer un Process avec un bloc using ?

Par exemple, ceci …:

 using (var process = new Process()) { process.StartInfo.FileName = "some process.exe"; process.Start(); process.WaitForExit(); } 

…au lieu de cela:

 var process = new Process { StartInfo = { FileName = "some process.exe" } }; process.Start(); process.WaitForExit(); 

Je demande parce que j’ai rarement vu Process apparaître dans un bloc using ; Par exemple, la page MSDN pour Process ne l’utilise pas. L’utilisation de l’initialiseur d’object est également utile.

Si je devais l’utiliser, devrais-je alors aller le «modifier» à ma base de code existante?

Quelles pourraient être les conséquences si cela n’était pas fait? (En supposant que WaitForExit() est appelé correctement dans chaque cas.)

Si vous ne pouvez pas ou ne pouvez pas utiliser using (), vous devez vous assurer de disposer de la variable de processus lorsqu’elle ne sera plus nécessaire.

Si vous utilisez la variable de processus dans une classe (au lieu d’un programme ou d’une méthode), cette classe doit alors implémenter IDisposable, puis appeler _process.Dispose dans sa méthode Dispose (bool):

 void Dispose(bool disposing) { ... if (_process != null) { Dispose(_process); } } 

S’il n’y a pas de champ _process mais seulement une variable de processus que vous utilisez dans votre méthode, vous devez en disposer à l’intérieur de la méthode:

 void MyMethod() { var process = ... ... use it here ... process.Dispose(); } 

L’exemple MSDN est artificiel. Le programme qui ouvre un descripteur de processus se ferme dès qu’il lance le processus. Lorsque ce programme se ferme, toutes les poignées ouvertes sont fermées.

Si vous ouvrez un descripteur de processus, vous devez le fermer. Le remplacement Process.Dispose de Component.Dispose appelle simplement Process.Close. L’instruction using simplifie cela.