Ce problème semble persister dans .NET 3.5 SP1 ainsi que .NET 4.0.
Pour reproduire le problème, vous devez créer un ToolStrip avec plus d'éléments qu'il ne peut afficher, ce qui entraîne la création d'un bouton de débordement. Le problème n'apparaît que lorsque vous cliquez sur le bouton de débordement. En cliquant dessus, vous créez un objet ToolStripOverflow qui s'abonne à l'événement Microsoft.Win32.UserPreferenceChangedEventHandler. ToolStrip ne dispose pas de l'objet ToolStripOverflow qui empêche le gestionnaire d'événements d'être supprimé et provoque une fuite.
Cela nous a causé d'énormes problèmes dans une grande application qui a créé des formulaires avec ToolStrips sur eux.
Un travail autour de changer la méthode Dispose de la forme ou de contrôle qui héberge ToolStrip comme suit:
protected override void Dispose(bool disposing)
{
if (disposing)
{
var overflow = toolStrip1.OverflowButton.DropDown as ToolStripOverflow;
if (overflow != null)
overflow.Dispose();
}
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
Cette résolu le problème pour nous
Quelle version du framework .NET a été résolu dans? Utilisez-vous cette version? –
J'utilise le dernier framework .Net. 3.5. Mais nous avons décidé de supprimer la barre d'outils et d'implémenter la fonction avec d'autres contrôles pour contourner le problème de la mémoire. –