我想弄清楚如何簡單地顯示一個WinForms對話框(代碼如下)時,我得到以下異常和callstack。這不會一直髮生,但我在異常日誌中看到它。有任何想法嗎?我無法弄清楚什麼會引用一個處置對象?System.ObjectDisposedException從簡單的窗體顯示
我已驗證(通過其餘調用堆棧)應用程序未關閉,它正常運行。
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)
這是正在顯示的對話框的代碼。唯一的「愚蠢」代碼可能是textPassword_KeyDown處理程序。我應該拉出我想要的代碼,而不是以這種方式調用btnOK_Click。
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();
}
}
對於點擊,你可以做'btnOK.PerformClick()' – 2009-09-16 02:55:18
此外,它似乎並不可能猜測從您發佈的代碼的問題。一些事情可能像線程一樣發生,或者主要的形式引發了一個異常,迫使它關閉。檢查CrossThread通信。 – 2009-09-16 02:59:08
我猜你可能應該在ShowDialog調用之後處理那個表單對象,或者使用using塊。 – 2009-09-16 03:00:22