Je pourrais.
Mais d'une part, ta question ne veut rien dire, ce qui montre en effet que t'as pas compris comment ça marche, mais ça montre aussi que t'as pas compris à quoi ça sert.
D'autre part, la documentation (même la version traduite en français) est limpide, et je ne vois pas ce qu'il y aurait de mieux à faire que la paraphraser…
GCHandle, structure; Notes :
La classe GCHandle est utilisée avec l'énumération GCHandleType pour créer un handle correspondant à n'importe quel objet managé. Il existe quatre types possibles pour ce handle : Weak, WeakTrackResurrection, Normal ou Pinned. Lorsque le handle a été affecté, vous pouvez l'utiliser pour empêcher l'objet managé d'être récupéré par le garbage collector lorsqu'un client non managé détient la seule référence. Sans un tel handle, l'objet peut être récupéré par le garbage collector avant d'avoir terminé l'action qu'il est en train d'accomplir pour le client non managé.
Vous pouvez également utiliser GCHandle pour créer un objet épinglé qui retourne une adresse mémoire et empêche le garbage collector de placer l'objet en mémoire.
Lorsque le handle est hors de portée, vous devez le libérer explicitement en appelant la méthode Free ; sinon, des fuites de mémoire peuvent se produire. Lorsque vous libérez un handle épinglé, l'objet associé est désépinglé et devient disponible pour le garbage collection s'il n'y a pas d'autres références à celui-ci.
Deux des utilisations possibles sont mentionnées là dedans… Si tu ne comprends pas, c'est certainement que tu ne comprends pas la gestion de la mémoire par .NET, donc creuse d'abord de ce côté…