我正在与我的c#项目中名为CSCCOM的自定义COM组件进行交互。
我用IDisposable包装它如下:
的 Form1.cs的 的
try {
using (CSCCOMWRAP CSC = new CSCCOMWRAP()) {
CSCCodeList CSCL = new CSCCodeList(CSC);
comboBox1.DataSource = CSCL.List;
Marshal.ReleaseComObject(CSCL);
}
}
catch (COMException ex) { }
的 CSCCodeList.cs 的
try {
var cscl = CSC.GetCodes();
for (int i = 1; i <= cscl.Count(); i++) {
object item = i;
var code = cscl.Item(ref item);
List.Add(new CSCCode((string)code.Name, Convert.ToString(code.Code)));
}
}
catch (Exception ex) { );
程序执行后,我仍会在ProcessExplorer's下方窗格的DLL视图中看到CSCCOM.dll 两次 。
这表明由于某种原因,我的COM dll不会被冲出系统。
答案 0 :(得分:3)
很长一段时间没有COM,但在我看来你永远不会发布cscl或代码变量
var cscl = CSC.GetCodes();
for (int i = 1; i <= cscl.Count(); i++) {
object item = i;
var code = cscl.Item(ref item);
List.Add(new CSCCode((string)code.Name, Convert.ToString(code.Code)));
使用ReleaseComObject,导致RCW计数没有减少并使dll“浮动”
答案 1 :(得分:0)
以下是 CSCCodeList.cs 中需要修改的内容:
try {
var cscl = CSC.GetCodes();
for (int i = 1; i <= cscl.Count(); i++) {
object item = i;
var code = cscl.Item(ref item);
List.Add(new CSCCode((string)code.Name, Convert.ToString(code.Code)));
Marshal.ReleaseComObject(code);
}
Marshal.ReleaseComObject(cscl);
}
希望它有所帮助!