[C#] Comment connaitre le processus attché à un fichier ?

Voilà,
j’ai fait un petit prog qui se compose d’une imagelist, d’un gros picturebox et de 4 petits picturebox.
Le gros picturebox accepte le drag&drop.
Les 4 petites picturebox affichent les miniatures de mon imagelist.
Tout fonctionne très bien… Sauf:
lorsque je fait le dragdrop d’une image, il m’est impossible ensuite de l’effacer ou de la modifier. J’ai une erreur indiquant que le fichier est utilisé par un autre processus.
(cette erreur ne survient qu’après un drag&drop).
Je précise que je vire bien l’image de mon imagelist AVANT de tenter de l’effacer du disque. (imagelist.RemoveAt(indexquivabien)).
Donc, si quelqu’un a une idée, because je commence à devenir fou…
Merci d’avance…

edit: ce que j’aimerais faire, c’est connaitre le processus qui tient mon fichier afin de le détruire…
Ce message a été édité par aristidi le 13/06/2004

Il y a de fortes chances que cela soit l’explorer ou ton propre programme. Donc avant de tanter quoi que ce soit par programmation, je te conseille de vérifier ca dans un cas précis avec processexplorer.

Oui a tout les coups c’est ton programme. A ne pas oublier: comme toute classe qui est un “enrobage” (wrapper) leger autour d’une resource native il ne faut surtout pas oublier d’appeller Dispose quand on a fini de l’utiliser. (et qui souvent ne peuvent etre liberes que dans le meme thread que celui qui les a cree, et donc qui necessite un appel explicite a Dispose et pas juste de laisser le finalizer le faire au moment de la GC). Sinon on se retrouve dans des cas de ce genre. En general, tout objet qui implemente IDisposable il FAUT appeller Dispose, dans un joli try / finally ou dans le dispose de l’objet qui l’utilise si c’est un private, c’est encore mieux…
Ce message a été édité par GloP le 14/06/2004

Merci Tzim pour ton lien. Je ne connaissait pas et ç’est super-pratique.
Ca m’a permis de comprendre où était mon problème: en fait, j’appelais bien dispose à chaque fois que c’était possible, et j’ai même poussé le vice à appeler GC.Collect().
En fait, le problème vient du fait que les modifs que je fait sur mes images, je les fait par valeur et non par référence…
(c’est processexplorer qui m’a mit sur la voie).
Bon, ben il ne me reste plus qu’a nettoyer mon code et ça devrait fonctionner.
Merci à tous deux.

Euh, GC.Collect(), saimal.
Il y a un truc bien pratique en C#, pour être sûr de pouvoir disposer:
using(machin truc = new machin) {

}
qui équivaut en gros à un try / finally avec le dispose dedans.