我有一个不明白的问题。 首先让我解释一下我的软件如何工作。
我每分钟开发3个不同的软件循环,其中两个正在打开相同的excel文件,但不是同时打开,但是其中一个有时会崩溃,可能是8小时之后,2天之后或之后1小时。真是一团糟。
它可以位于 xlWorkbook = xlApp.Workbooks.Open(path); 或 xlWorksheet = xlWorkbook.Sheets {1};
这是给我一个错误的部分:
public Excel.Application xlApp = new Excel.Application();
public Excel.Workbook xlWorkbook;
public Excel._Worksheet xlWorksheet;
public Excel.Range xlRange;
public void CsvParcoursVisuCrea(string flux, double delay, string hour, string name, string date, int index)
{
DateTime dateconvert = DateTime.Parse(date);
string path = domain + @"TCD_ParcoursVisu.xlsx";
if (!path.IsFileOpen())
{
if (index == 0)
xlWorkbook = xlApp.Workbooks.Open(path);
if (xlWorkbook == null)
{
if (index == 0)
LogWriteToFile("Error in workbook, impossible to open", "ALERT : WorkBook error");
}
else
{
if (index == 0)
LogWriteToFile("TCD_ParcoursVisu.xlsx is now open", "Process : Creation TCD parcours");
xlWorksheet = xlWorkbook.Sheets[1];
xlRange = xlWorksheet.UsedRange;
int rowCount = xlRange.Rows.Count;
int colCount = xlRange.Columns.Count;
if (rowCount <= 1)
{
xlWorksheet.Cells[rowCount, 1] = "Flux";
xlWorksheet.Cells[rowCount, 2] = "Nom Parcours";
xlWorksheet.Cells[rowCount, 3] = "Date";
xlWorksheet.Cells[rowCount, 4] = "Heure";
xlWorksheet.Cells[rowCount, 5] = "Minute";
}
xlWorksheet.Cells[rowCount + 1, 1] = flux;
xlWorksheet.Cells[rowCount + 1, 2] = name;
xlWorksheet.Cells[rowCount + 1, 3] = dateconvert;
xlWorksheet.Cells[rowCount + 1, 4] = hour;
xlWorksheet.Cells[rowCount + 1, 5] = delay / 60;
}
}
else
{
LogWriteToFile("Being used by another process", "Process : Parcours visu crea");
}
}
return false;
}
这是崩溃前我最后一个日志行的屏幕截图
我已经在上午10点启动了它。
这是在我的软件崩溃中调用CsvParcoursVisuCrea的方法:
private void AllCsvCreation()
{
SumParcours();
int[] tabMemorySum = IndexSum();
for (int i = 0; i < parcObj.Date.Length; i++)
{
if (parcObj.Date[i] != null)
{
CsvCreation(parcObj.Date[tabMemoryIndex[i]], parcObj.Hour[tabMemoryIndex[i]], parcObj.Exploitant, parcObj.Name[tabMemoryIndex[i]], tabMemorydelay[tabMemorySum[i] - 1].ToString(), parcObj.Fiability[tabMemoryIndex[i]].ToString(), parcObj.StrnmeDelayXystaXyendScore[tabMemoryIndex[i]], i);
CsvParcoursVisuCrea(parcObj.Exploitant, tabMemorydelay[tabMemorySum[i] - 1], parcObj.Hour[tabMemoryIndex[i]], parcObj.Name[tabMemoryIndex[i]], parcObj.Date[tabMemoryIndex[i]], i);
}
}
//Cleanup
GC.Collect();
GC.WaitForPendingFinalizers();
//Close and release
xlApp.DisplayAlerts = false;
xlWorkbook.Save();
xlWorkbook.Close();
xlApp.DisplayAlerts = true;
}
CsvCreation和CsvParcoursVisuCrea没有打开相同的Csv,CsvCreation从未崩溃,我用AppendLine()填充了CsvCreation。
希望它很清楚,很长很抱歉。
答案 0 :(得分:0)
知道了, 我所要做的就是处理文件当前被锁定的异常,经过一些研究,Interop有时会被锁定,这就是为什么我的软件崩溃的原因。