嘿,我创建的应用程序有问题。基本上在最初的几周里,我试图介入以捕获所有首次机会异常,并将它们记录到数据库中并继续正常进行。现在,这里是我不希望关闭应用程序的标签。我只想记录错误并继续,所以app.quit等不是我想要的。如果遇到未处理的异常,我将为此设置一个单独的错误处理程序。很好,但是它导致单词的多个实例打开,并导致我的系统因内存不足而崩溃。所以我的问题是,是否有人对如何最好地实现该方案有任何想法,或者对如何解决此问题有任何建议?
代码很简单。
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.FirstChanceException += LogException;
public async Task LogException(string exception)
{
var word = new Microsoft.Office.Interop.Word.Application();
var winVer = Environment.OSVersion.ToString();
CiteRightException exceptionData = new CiteRightException();
exceptionData.stackTrace = exception;
exceptionData.windowsVersion = word.Version;
exceptionData.windowsVersion = winVer;
var content = new StringContent(Json.Encode(exceptionData),
Encoding.UTF8, "application/json");
await httpClient.PostAsync("/api/logException", content);
}
我尝试使用.quit方法(没有停止打开其他实例),并认为这可能是线程问题currentThread.join(),但仍在创建新实例。如果我注释掉firstchanceexception行,那么一切正常,因此100%来自此处。
首先十分感谢
最佳答案
您必须处置所有COM对象。
请看这个Disposing of Microsoft.Office.Interop.Word.Application
在您的情况下:
System.Runtime.InteropServices.Marshal.ReleaseComObject(word)
PS :尝试尝试..最终阻止,以防万一您还有其他异常。
关于c# - 第一次机会异常错误处理,导致带有单词的多个实例出现内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46775231/