我有一个Vb6应用程序,它处理一些文件并写入一个完美运行的Excel文件。我有另一个C#.net应用程序,它也处理一些文件并完美运行。我已安排这些潮汐工作同时运行。我发现C#.net应用程序工作正常。但是Vb6应用程序一直有效,直到Excel编写方法。文件正在处理中,但写入excel部分始终处于挂起状态。
如果我们观察任务管理器,我可以看到一些excel.exe进程仍然没有关闭。我已经为垃圾收集做了必要的步骤。
以下是对象disoposal的vb6和C#.net的代码
excellApplication1.Workbooks.Close
excellApplication1.Quit
If Not objWorkSheet Is Nothing Then Set objWorkSheet = Nothing
If Not excellApplication1Is Nothing Then Set excellApplication1 = Nothing
ErrHandler:
excellApplication1.Workbooks.Close
excellApplication1.Quit
If Not objWorkSheet Is Nothing Then Set objWorkSheet = Nothing
If Not excellApplication1 Is Nothing Then Set excellApplication1=Nothing
C#释放对象的代码。
Marshal.ReleaseComObject(Application1);
Marshal.ReleaseComObject(Application2);
Marshal.ReleaseComObject(Application3);
我观察到的是,当C#.NET应用程序运行时,任务管理器中会显示EXCEL.exe进程。 VB6(不是VB.NET)应用程序无法写入Excel文件。对于vb6应用程序,只有此部分处于挂起状态,因此应用程序挂起而未完成。
有人可以对此有所了解吗? 编辑:两个应用程序都试图写入不同的文件。
答案 0 :(得分:0)
这就是我的方式:
xlWorkBook.SaveAs("" + saveasPath + ".xlsx");
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
releaseObject(xlWorkBook);
releaseObject(xlApp);
releaseObject(xlWorkSheet);
GC.Collect();
xlWorkSheet = null;
xlWorkBook = null;
xlApp = null;
Cursor.Current = Cursors.Default;
Process.Start("" + saveasPath + ".xlsx");
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show(ex.Message);
}
finally
{
GC.Collect();
}
}