Mar*_*ijn 4 c# exception winforms
我有一个带有ReportViewerMicrosoft 控件的自定义控件.使用此自定义控件激活表单时,单击红色十字(在右上角)退出应用程序,我得到一个System.CannotUnloadAppDomainException.
我已经读过这是MS ReportViewer控件的已知错误.要防止显示此异常,您需要调用该ReleaseSandboxAppDomain方法.我试过这个,但它无法让它发挥作用.我ParentForm_Closing在自定义控件中的事件上调用此方法.但是,当您通过单击右上角的红叉来关闭应用程序时,不会触发此事件.
所以我的问题是,如何防止此异常显示?
以下是调用该ReleaseSandboxAppDomain方法的代码:
this.ParentForm.FormClosing += delegate
{
reportViewer.LocalReport.ReleaseSandboxAppDomain();
};
Run Code Online (Sandbox Code Playgroud)
您ParentForm在面板内的事实肯定是您的问题.
如果我理解你的情况,你有以下控件/表格:
MainForm 是您的应用程序的主要形式Panel1 是一个内部控件的面板 MainFormTheParentForm是一个内部的形式Panel1(TopLevel作为假)UserControl1 是一个用户控件里面 TheParentFormReportViewer 是里面的Microsoft用户控件 UserControl1当你关闭时MainForm,因为它不是顶级形式TheParentForm而没有关闭.您可以做的是在事件处理程序中的n中添加以下代码:MainFormFormClosing
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
foreach (Control ctrl in this.Panel1.Controls)
{
Form ctrlAsForm = ctrl as Form;
if (ctrlAsForm != null)
{
ctrlAsForm.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将遍历内部的所有控件Panel1,并尝试Close()在控件是表单时显式调用该方法.因此,关闭主窗体也将关闭内部的非顶层形状Panel1.
现在,正如你已经写过UserControl1:
this.ParentForm.FormClosing += delegate
{
reportViewer.LocalReport.ReleaseSandboxAppDomain();
};
Run Code Online (Sandbox Code Playgroud)
应该没事; 何时TheParentForm关闭,您将能够进行清理并避免异常.
| 归档时间: |
|
| 查看次数: |
4654 次 |
| 最近记录: |