我正在使用C#中的Excel加载项,在运行模拟时显示进度条。我希望BackgroundWorker以异步方式运行模拟,并将进度报告回进度条表单。
模拟方法需要引用当前的Excel COM应用程序。我有一个名为ThisAddin
的类,它实现了ExcelDna.Integration.IExcelAddIn
接口,并有一个返回应用程序的静态属性。
但是,只要后台工作程序尝试以任何方式使用该应用程序,即使退出Excel,它也会使Excel进程继续运行。
例如,如果我只是在Excel应用中设置属性,那么:
void backgroundworker_DoWork(object sender, DoWorkEventArgs e)
{
ThisAddIn.App.DisplayStatusBar = true;
}
然后在运行加载项并关闭Excel之后,我仍然会在我的任务管理器中运行Excel进程。
有没有办法确保进程被杀死?我在某种程度上在后台工作程序中创建应用程序的另一个实例?我不明白,因为如果我在后台工作程序中调用应用程序上的quit(),它将关闭整个应用程序,并且该过程仍将继续运行!
当后台工作人员完成时,我确保在其上调用dispose()并中止其当前线程。我使用的是#AbortableBackgroundWorker"建议的类here。但这仍然无法解决我的问题。
答案 0 :(得分:1)
问题是您持有的Excel对象的时间比您想象的要长。我见过的两个选项成功使用了:
选项1更容易理解,但更脆弱且容易出错。