Ich habe ein Formular-Menü, das nicht vollständig entsorgen wird. Unten ist der vollständige Formularcode. Es ist Teil eines größeren Systems, sodass andere Formulare geöffnet und geschlossen werden, bevor das Menü geöffnet wird.Winform nicht vollständig entsorgen
Es gibt einen Formular-Timer, der jede Sekunde auslöst und druckt, ob das Formular entsorgt wird oder nicht. Es gibt eine Schaltfläche, die ein anderes Formular öffnet, Suchen und Menü schließen. Die Suche hat auch einen Timer, der anzeigt, ob es entsorgt wird oder nicht.
Wenn Menü öffnet, ist die Debug-Ausgabe als
erwartet*********** (in main menu): Disposed False
*********** (in main menu): Disposed False
Wenn ich auf, erhalte ich Timer für beiden Menüs Zecken und Suchen
*********** (in main): Disposed True
*************** (in search) Disposed False
Es zeigt, dass die erste Instanz von Menu ist entsorgt, aber offensichtlich läuft der Timer noch. Als ich suchen Ausgang und Main geöffnet ist, gibt es nun zwei Haupt Timer
*********** (in main): Disposed True
*********** (in main): Disposed False
läuft ich halten kann dies zu tun (klicken Sie auf Suchen und Ausgang zu öffnen) und die Anzahl der Haupt Timer läuft Erhöhung hält. Ich bin perplex. Hier ist der Code für die Haupt
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Diagnostics;
namespace Gui
{
public partial class Menu : Form
{
private System.Windows.Forms.Timer timer1;
private Button button1;
private IContainer components;
public Menu()
{
InitializeComponent();
}
private void Menu_Load(object sender, EventArgs e)
{
}
private void timer1_Tick(object sender, EventArgs e)
{
Debug.Print("*********** (in main): Disposed {0}", IsDisposed);
}
private void button1_Click(object sender, EventArgs e)
{
var search = new Search();
search.Show();
Close();
}
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// timer1
//
this.timer1.Enabled = true;
this.timer1.Interval = 1000;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// button1
//
this.button1.Location = new System.Drawing.Point(11, 17);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(125, 32);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Menu
//
this.ClientSize = new System.Drawing.Size(282, 253);
this.Controls.Add(this.button1);
this.Name = "Menu";
this.Load += new System.EventHandler(this.Menu_Load);
this.ResumeLayout(false);
}
}
}
Sie verweisen also immer auf das Formular? Wie könnte es dann entsorgt werden? – TaW
Bitte zeigen Sie den Code von 'Search', der das Hauptformular wieder öffnet. Meine Vermutung ist, dass Sie eine neue Instanz des Formulars erstellen, anstatt das vorhandene erneut anzuzeigen. Vor allem, weil du es näher rufst, anstatt es zu verstecken. –
@TaW - Entsorgung hat nichts mit einer Referenz zu tun. –