我有以下功能:
private void emailVideoButton_Click(object sender, EventArgs e)
{
VideoEMailForm emailForm = new VideoEMailForm();
emailForm.ShowDialog();
}
这给了我以下警告:
警告1 CA2000:Microsoft.Reliability:在方法中 'VideoPlayerControl.emailVideoButton_Click(object,EventArgs)',调用 System.IDisposable.Dispose在所有引用之前对象'emailForm' 它超出了范围。
我读了这个链接http://msdn.microsoft.com/en-us/library/ms182289(v=vs.80).aspx并收集了我需要调用的内容。像这样说:
private void emailVideoButton_Click(object sender, EventArgs e)
{
VideoEMailForm emailForm = new VideoEMailForm();
emailForm.ShowDialog();
emailForm.Dispose();
}
然后我收到以下警告:
警告1 CA2000:Microsoft.Reliability:在方法中 'VideoPlayerControl.emailVideoButton_Click(object,EventArgs)',对象 'emailForm'未在所有异常路径中放置。呼叫 System.IDisposable.Dispose在所有引用之前对象'emailForm' 它超出了范围。
任何人都可以帮我摆脱这个警告吗?
答案 0 :(得分:12)
编译器试图说的是,如果在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();
}
}
}
答案 1 :(得分:4)
您需要using
语句,该语句将在Dispose()
块中调用finally
,以确保即使抛出异常也会处置它。