Не получается открыть большую Excel книгу средствами Microsoft.Office.Interop.Excel

Функция справляется с открытием 5 таблиц по 50 строк в каждой. Но когда я попробовал открыть таблицу с 3200 строк - программа замерла и минут через 5 появилась ошибка:

Ошибка:

Помощник по отладке управляемого кода "ContextSwitchDeadlock" : "CLR не удалось перейти из COM-контекста 0xb970f0 в COM-контекст 0xb97038 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."

Как можно сделать чтобы не было проблем с Excel файлами в которых пару тысяч строк?
Функция загрузки книги:
List<DataTable> LoadExcelSheets()
        {
            List<DataTable> dataTables = new List<DataTable>();
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "(*.xlsx, *.xls) | *.xlsx; *.xls";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                CloseExcelFile();
                DataTable dataTable;
                Workbook = ExcelApplication.Workbooks.Open(openFileDialog.FileName);
                foreach (Excel.Worksheet worksheet in Workbook.Worksheets)
                {
                    worksheets_list.Add(worksheet);
                }
                for(int i = 0; i < worksheets_list.Count; i++)
                {
                    dataTable = new DataTable();
                    DataColumn dataColumn = new DataColumn();
                    dataColumn.ColumnName = "Row №";
                    dataColumn.AutoIncrement = true;
                    dataColumn.AutoIncrementStep = 1;
                    dataColumn.AutoIncrementSeed = 1;
                    dataTable.Columns.Add(dataColumn);
                    lastCell = worksheets_list[i].Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell);
                    dataTable.Rows.Add();
                    dataTable.Columns.Add();
                    for (int j = 1; j < lastCell.Column; j++)
                    {
                        dataTable.Columns.Add();
                        for (int k = 1; k < lastCell.Row; k++)
                        {
                            dataTable.Rows.Add();
                            dataTable.Rows[k][j] = worksheets_list[i].Cells[k + 1, j].Text;
                        }
                    }
                    dataTable.Rows[0][1] = worksheets_list[i].Name;
                    dataTables.Add(dataTable);
                }
                return dataTables;
            }
            else
            {
                return null;
            }
        }

Ответы (0 шт):