2016-07-28 16 views
0

於是我就到使用時的OLE嵌入情況下的WorkbookOpen事件的一個問題:它是一個有據可查的問題:如何清理Excel.AppEvents AdviseSinks?

閱讀這篇博客 https://blogs.msdn.microsoft.com/vsofficedeveloper/2008/04/11/excel-ole-embedding-errors-if-you-have-managed-add-in-sinking-application-events-in-excel-2/

我不僅需要一個IConnectionSink,而且在每個作爲ap傳遞的工作簿對象上調用Marshal.ReleaseComObject arameter。

public class ExcelAppEventSink : Excel.AppEvents 
{ 
... other functions ... 

public void WorkbookOpen(Excel.Workbook Wb) 
{ 
    <-- operate on workbook --> 
    Marshal.ReleaseComObject(Wb); 
} 

... other functions ... 
} 

但是從微軟發佈的另一篇博客文章發佈2年後聲稱Marshal.ReleaseComObject是危險的。 https://blogs.msdn.microsoft.com/visualstudio/2010/03/01/marshal-releasecomobject-considered-dangerous/

,因爲我只需要鬆開RCWs這將是在2016年安全調用 CleanupUnusedObjectsInCurrentContext在函數調用,而不是結束了嗎?

額外的閱讀材料:

回答