我的职能如下:
private void emailVideoButton_Click(object sender, EventArgs e)
{
VideoEMailForm emailForm = new VideoEMailForm();
emailForm.ShowDialog();
}这给了我以下警告:
警告1 CA2000 : Microsoft.Reliability :在方法Microsoft.Reliability EventArgs‘中,在对对象'emailForm’的所有引用超出作用域之前调用System.IDisposable.Dispose。
我阅读了这个链接http://msdn.microsoft.com/en-us/library/ms182289(v=vs.80).aspx,并推断我需要像这样调用.Dispose:
private void emailVideoButton_Click(object sender, EventArgs e)
{
VideoEMailForm emailForm = new VideoEMailForm();
emailForm.ShowDialog();
emailForm.Dispose();
}但我得到了以下警告:
警告1 CA2000 : Microsoft.Reliability :在方法Microsoft.Reliability EventArgs)‘中,对象'emailForm’不是沿所有异常路径释放的。在所有对对象的引用超出作用域之前,在对象'emailForm‘上调用emailForm。
有人能帮我摆脱这个警告吗?
发布于 2013-06-04 14:27:25
编译器想要说的是,如果在emailForm.ShowDialog()中抛出异常,Dispose()将不会被调用。
使用一个using语句来确保它会以任何方式被调用。
private void emailVideoButton_Click(object sender, EventArgs e)
{
using (VideoEMailForm emailForm = new VideoEMailForm())
{
emailForm.ShowDialog();
}
}这相当于此代码:
private void emailVideoButton_Click(object sender, EventArgs e)
{
VideoEMailForm emailForm = null;
try
{
emailForm = new VideoEMailForm();
emailForm.ShowDialog();
}
finally
{
if (emailForm != null)
{
((IDisposable)emailForm).Dispose();
}
}
}发布于 2013-06-04 14:26:35
您需要using语句,它将在finally块中调用Dispose(),以确保即使抛出异常也会释放它。
https://stackoverflow.com/questions/16920386
复制相似问题