Здравствуйте, minyurov, Вы писали:
M>При одновременном октрытии 1 или 2 экземпляров, все работает. При 3 экземплярах работает нестабильно, далее возникают стабильные ошибки типа "Не найден файл" (хотя файл создан и находится во временном каталоге) или "Нельзя одновременно открыть несколько форм".
Общие рекомендации
— Св-ва Interactive и DisplayAlerts установить в False
— Не "бросать" ссылки на объекты, возвращаемые екселем!
Неправильно:
app.Workbooks[1].Worksheets[1].Range["A1"].Value = "aaa";
Правильно:
Workbooks books = null;
Workbook book = null;
try
{
books = app.Workbooks;
book = books[1];
}
finally
{
if (book != null) Marshal.ReleaseComObject(book);
if (books != null) Marshal.ReleaseComObject(books);
// Опционально вызвать GC.Collect();
}
— Явно закрывать приложение примерно так:
finally
{
app.Quit();
Marshal.ReleaseComObject(app);
GC.WaitForPendingFinalizers();
GC.Collect();
}
— Максимально в коде использовать примитивы синхронизации для гарантии того, чтобы exe-север не дергали за вымя несколько потоков.
— Вообще по возможности отказаться от екселя и использовать Reporting Service или какой-нибудь класс, умеющий работать с Biff (например, Component One C1Excel)