今天我注意到我的代码中有一个错误,我认为我之前已经处理过了。我正在处理应用程序,我经常Windows Forms
使用该事件。form_load
为了处理Form_load
事件中出现问题并引发异常的情况,我使用以下代码:
catch (Exception ex)
{
LogErrorAndShowMessage(ex, Resources.ERROR_LOAD);
//Otherwise Error : "Cannot call Close() while doing CreateHandle()".
this.BeginInvoke(new InvokeDelegate(CloseTheForm));
LoadForm<Materials>(closeAlreadyOpened : false);
}
这就是我声明委托和方法的方式:
public delegate void InvokeDelegate();//used if form load fails
private void CloseTheForm()
{
this.Close();
}
从今天开始它运行良好。发生了什么 -Form_load
如果我DataSource
为我的 ComboBoxes 设置了,并且碰巧从SetDataSource
方法中抛出了一个错误,最终导致我在使用之前遇到的完全相同的错误BeginInvoke
- Cannot call Close() while doing CreateHandle()
。
这是异常行为,如果从其他地方抛出异常,代码仍然可以正常工作,只有在设置数据源期间出现错误。
有什么建议可能导致这种异常行为,我该如何解决?
附言
这就是我创建新表单的方式:
protected void LoadForm<T>(ToolStripButton/*ToolStripDropDownButton*/ formButton,
string buttonText,
long? loadEntityId = null,
bool closeAlreadyOpened = true) where T : BaseForm
{
MainForm parentFrm = GetParentForm();
if (parentFrm != null)
{
if (formButton != null)
{
parentFrm.SetForeColor(formButton);
}
T openForm = SingletonFormProvider.GetInstance<T>(parentFrm,
closeAlreadyOpened);
openForm.LoadEntityId = loadEntityId;
openForm.MdiParent = parentFrm;
openForm.Dock = DockStyle.Fill;
openForm.Show();
openForm.Activate();
}
else
{
MessageBox.Show("Parent form not found!", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
也许Hans Passant
我应该提出来try-catch
解决openForm.Show()
这个问题?