Langjähriger Joelonsoftware Follower, zum ersten Mal Stackoverflow Poster.Zugriff auf die Eigenschaft Text eines Steuerelements nach dem übergeordneten Formular Dispose() 'd?
Ich will wissen, "wie sicher:" Ich kann die folgende (C#) tun:
Form formDlg = new Form();
TextBox box = new TextBox();
formDlg.Controls.Add(box);
formDlg.ShowDialog();
formDlg.Dispose();
string sUserEntered = box.Text; // After parent Dispose'd!
In der Praxis wird diese (scheinbar) funktioniert, weil Box (als Steuer) ein private Text Feld (eine Zeichenfolge), die es verwendet, um seine Texteigenschaft zu implementieren, nachdem sein Fensterhandle zerstört wurde.
Ich werde nicht mit einer allgemeinen Antwort zufrieden sein, dass "Sie nicht auf ein Objekt zugreifen können, nachdem es disposed", weil (1) ich kann kein solches Verbot in MS Docs finden, (2) ich bin Zugriff auf eine nicht verwaltete Ressource und (3) dieser Code löst keine Ausnahme aus (einschließlich ObjectDisposedException).
Ich möchte dies tun, damit ich eine kombinierte "ShowAndDispose" -Methode erstellen und verwenden kann, um das Risiko des Vergessens zu reduzieren, immer Dispose() nach ShowDialog() aufzurufen.
Um zu komplizieren, ändert sich das Verhalten im Debugger. Wenn ich vor Dispose() breche; dann Quick Watch Box und Drilldown in seine Control Basisklasse; dann gehe über Dispose() hinaus; dann box.Text gibt "" zurück! In anderen Szenarien gibt box.Text den vom Benutzer eingegebenen Text zurück.
Warum würden Sie eine Dispose auf das Formular erzwingen? Vor allem, wenn Sie nicht auf nicht verwaltete Ressourcen zugreifen. Lassen Sie den Rahmen/GC sich darum kümmern. EDIT: Ich habe das Gefühl, dass Sie eine viel kompliziertere Situation als der Code oben haben. – Zyphrax
Nicht allein, warum greifen Sie auf ein Textfeld in einem Formular zu, das über dispose() ... verfügt? Warum willst du das machen? Macht das keinen Sinn für mich? Das ist wie Zeiger in C, du mallokierst einen Zeiger, machst ein paar Sachen damit, dann befreie es, dann deneferenziere den Zeiger, nachdem er frei ist! – t0mm13b
Zyphrax: Ein Formular enthält viele nicht verwaltete Ressourcen, 1 pro Steuerelement. –