我在内部应用中使用以下方法进行拼写检查.作为一个新的程序员,它是通过多种资源拼凑而成的,并经过调整直到对我有用.
随着我的成长和学习,我遇到了让我前进的事物,嗯.像How to properly clean up Excel interop objects in C#这样的SO帖子一样,它讨论了正确的Interop清理.
我注意到它反复提到使用Marshal.FinalReleaseComObject()或Marshal.ReleaseComObject().
我的问题是这个,根据下面的代码,我也需要吗?谢谢
public string CheckSpelling(string text)
{
Word.Application app = new Word.Application();
object nullobj = Missing.Value;
object template = Missing.Value;
object newTemplate = Missing.Value;
object documentType = Missing.Value;
object visible = false;
object optional = Missing.Value;
object savechanges = false;
app.ShowMe();
Word._Document doc = app.Documents.Add(ref template, ref newTemplate, ref documentType, ref visible);
doc.Words.First.InsertBefore(text);
Word.ProofreadingErrors errors = doc.SpellingErrors;
var ecount = errors.Count;
doc.CheckSpelling(ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional, ref optional, ref optional,
ref optional, ref optional, ref optional);
object first = 0;
object last = doc.Characters.Count - 1;
var results = doc.Range(ref first, ref last).Text;
doc.Close(ref savechanges, ref nullobj, ref nullobj);
app.Quit(ref savechanges, ref nullobj, ref nullobj);
return results;
}
解决方法:
我肯定会说.您应该始终使用Marshal.ReleaseComObject清理.NET代码中的非托管COM引用.