110,535
社区成员
发帖
与我相关
我的任务
分享
private void InitModule(IPlugin plugin)
{
ButtonItem buttonItem = new ButtonItem
{
Image = plugin.ModulePicture,
Text = plugin.ModuleName,
ButtonStyle = eButtonStyle.ImageAndText,
};
itemPanel1.Items.Add(buttonItem);
buttonItem.Click += plugin.ChildNodes["基础数据"];
}
警告 2 CA2000 : Microsoft.Reliability :
在方法 'FrmMain.InitModule(IPlugin)' 中,
'<>g__initLocal1' 对象未按所有异常路径释放。
请在对 '<>g__initLocal1' 对象的所有引用超出范围之前,
对该对象调用 System.IDisposable.Dispose。
D:\WorkSpace\NET2010\FormInForm\FormInForm\FrmMain.cs 92 FormInForm
public Boolean WriteMessageToText(String path, String message)
{
Boolean sucess = false;
FileStream fileStream = null;
StreamWriter streamWriter = null;
try
{
fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
streamWriter = new StreamWriter(fileStream);
streamWriter.BaseStream.Seek(0, SeekOrigin.End);
streamWriter.Write(message);
sucess = true;
}
catch
{
sucess = false;
throw;
}
finally
{
if (fileStream != null) //释放streamWriter 所占用的资源
fileStream.Dispose();
}
return sucess;
}
上述代码是最终版本。
如果稍作修改就会出现很好玩的事情。
1,在22行前面加入
if (streamWriter != null)
streamWriter.Dispose();
这样就会出现和楼主同样的问题。
2,在24行后面加入上述代码
就会导致ObjectDisposeException异常,流已经关闭。
有没有认真想过为什么1只是警告2却出现了异常?
依赖的确是依赖关系
StreamWriter是依赖于FileStream创建的,故释放了FileStream就连同StreamWriter也一并释放了,如若再释放就会出现异常。
如果先释放StreamWrite,再释放FileStream 确实不会报错,这时就出现了楼主所发现的警告了。因为StreamWrite已经释放了,你再让我释放一遍,聪明的微软就会给出提示。
这个只是其中的一种原因,可能还存在其它原因而导致出现楼主发现的警告现象,需要进一步去挖掘。
最后啰嗦句:不是有洁癖,而是想知其所以然。自己不去理解,而找个什么借口误人子弟的行为需要严重鄙视。