1。網(wǎng)上的一種說法,關(guān)閉range,關(guān)閉worksheet,關(guān)閉workbook,最后關(guān)閉excel
System.Runtime.InteropServices.Marshal.ReleaseComObject(Range);
2System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
3System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
Range = null;
myBook = null;
myExcel = null;
我試過,沒有成功
2。關(guān)閉進程
C#和Asp.net下excel進程一被打開,有時就無法關(guān)閉,?? 尤其是website.對關(guān)閉該進程有過GC、release等方法,但這些方法并不是在所有情況下均適用。? 于是提出了kill?? process的方法,?? 目前我見過的方法多是用進程創(chuàng)建時間篩選excel.exe進程,?? 然后kill 。???? 這樣的方法是不精確的,?? 也是不安全的,?? 通過對網(wǎng)上一些關(guān)于Api運用文章的閱讀,?? 我找到了更為直接精確找到這個process并kill的方法,以下就是代碼????????
using?? System.Runtime.InteropServices;??
?????
? [DllImport("User32.dll",?? CharSet?? =?? CharSet.Auto)]??
? public?? static?? extern?? int?? GetWindowThreadProcessId(IntPtr?? hwnd,?? out?? int?? ID);??
? protected?? void?? Button1_Click(object?? sender,?? EventArgs?? e)??
? {??
????? Excel.ApplicationClass?? excel?? =?? new?? Microsoft.Office.Interop.Excel.ApplicationClass();??
????? excel.Workbooks.Open("d:\aaa.xls",?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing,?? Type.Missing);??
????? IntPtr?? t?? =?? new?? IntPtr(excel.Hwnd);??
????? int?? k?? =?? 0;??
????? GetWindowThreadProcessId(t,?? out?? k);??
????? System.Diagnostics.Process?? p?? =?? System.Diagnostics.Process.GetProcessById(k);??
????? p.Kill();??????????????????
?? }
以上代碼百分百成功的關(guān)閉excel.exe進程
我的做法是結(jié)合兩者,先釋放資源,然后關(guān)閉進程。
同時網(wǎng)上說避免使用GC.Collect 方法 (),因為會導致整個clr進行g(shù)c,影響你的性能.所以我也沒有調(diào)用GC.Collect
posted on 2006-11-04 11:28
陳琪 閱讀(10167)
評論(16) 編輯 收藏 所屬分類:
C#