C# EPPlus通过多次保存打开文件并锁定文件

C# EPPlus通过多次保存打开文件并锁定文件,c#,epplus,C#,Epplus,我希望能够打开一个Excel文件(或者创建一个不存在的文件),并异步向其中添加数据。我使用阻塞集合使异步组件工作得很好,但是如果我想保存while语句的每个循环,我会不断遇到问题。 我可能会导致文件损坏,或者数据根本不会保存。或者有时它只保存两部分测试中的第一个或第二个数据段 我有以下代码来显示我的问题的类似精简版本: BlockingCollection<Excel_Data> collection = null; FileStream fs = new FileStream(th

我希望能够打开一个Excel文件(或者创建一个不存在的文件),并异步向其中添加数据。我使用阻塞集合使异步组件工作得很好,但是如果我想保存while语句的每个循环,我会不断遇到问题。 我可能会导致文件损坏,或者数据根本不会保存。或者有时它只保存两部分测试中的第一个或第二个数据段

我有以下代码来显示我的问题的类似精简版本:

BlockingCollection<Excel_Data> collection = null;
FileStream fs = new FileStream(this.path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
ExcelPackage excel = new ExcelPackage(fs);
int i = 0;
while (true) {
    //---- do some asyc operations
    Excel_Data dict_item = collection.Take();
    excel.Workbook.Worksheets.Add("sheet" + i.ToString());
    //excel.Save();
    excel.SaveAs(fs);

    if (++i == 2) {
        break;
    }
}
fs.Close();
BlockingCollection=null;
FileStream fs=newfilestream(this.path、FileMode.OpenOrCreate、FileAccess.ReadWrite、FileShare.Read);
ExcelPackage excel=新的ExcelPackage(fs);
int i=0;
while(true){
//----做一些asyc操作
Excel_Data dict_item=collection.Take();
excel.Workbook.Worksheets.Add(“工作表”+i.ToString());
//excel.Save();
excel.SaveAs(fs);
如果(++i==2){
打破
}
}
fs.Close();

在上面的示例中,仅创建2张工作表之后,文件就已经损坏,我不确定如何在不使用FileStream上的FileInfo的情况下修复此问题。但是,在我的应用程序运行期间,我将永远无法锁定文件以供写入。

为什么要将excel保存在while循环内而不是外部?该函数用于在应用程序运行期间将数据添加到文件中。它可能会持续几秒钟或几个小时。while循环应该在整个应用程序中保持活动状态。在此期间,我希望在“读取”文件时将数据用于外部,因此它始终保持文件的活动状态。