J'essaie de comprendre comment, en affichant simplement une boîte de dialogue WinForms (code ci-dessous), j'obtiens les exceptions Exception et callstack. Cela n'arrive pas tout le temps, mais je le vois dans mes journaux d'exception. Des idées? Je ne peux pas comprendre ce qui serait référencer un objet disposé?System.ObjectDisposedException à partir de l'affichage de formulaire simple
J'ai vérifié (via le reste de la pile d'appel) que l'application ne s'éteint pas, elle fonctionne normalement.
System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'MainForm'.
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.Form.CreateHandle()
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.GetSafeHandle(IWin32Window window)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at MyApp.MainForm.PromptForProfile()
at MyApp.MainForm.LoadProfile()
at MyApp.MainForm.barButtonItem1_ItemClick(Object sender, ItemClickEventArgs e)
Ceci est le code de la boîte de dialogue affichée. Le seul code "goofy" est probablement le gestionnaire textPassword_KeyDown. Je devrais probablement tirer le code que je veux sortir et n'appelle pas btnOK_Click de cette façon.
public partial class ProfileForm : DevExpress.XtraEditors.XtraForm
{
public string _username;
public string _password;
public ProfileForm()
{
InitializeComponent();
}
private void btnOK_Click(object sender, EventArgs e)
{
_username = textUsername.Text;
_password = textPassword.Text;
}
private void textPassword_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
btnOK_Click(sender, null);
this.DialogResult = DialogResult.OK;
e.Handled = true;
}
}
private void hyperLinkEdit1_Click(object sender, EventArgs e)
{
// show the proxy settings dialog
ProxyForm pform = new ProxyForm();
pform.ShowDialog();
}
}
Pour le clic, vous pouvez le faire 'btnOK.PerformClick()' –
semble ne pas possible de deviner le problème du code affiché. Quelque chose pourrait se passer comme un fil, ou la forme principale a soulevé une exception qui l'oblige à se fermer. Vérifiez la communication CrossThread. –
Je suppose que vous devriez probablement jeter cet objet de formulaire aussi après l'appel ShowDialog, ou utiliser un bloc using. –