与C#excel应用程序同时运行时,VB6 excel应用程序挂起

时间:2017-02-28 11:27:37

标签: c# .net excel vb6

我有一个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应用程序,只有此部分处于挂起状态,因此应用程序挂起而未完成。

有人可以对此有所了解吗? 编辑:两个应用程序都试图写入不同的文件。

1 个答案:

答案 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();
  }
}