проблема с потоками (чтение и запись в один файл excel)

У меня есть приложение, которое что-то делает. Как правило, основной их задачей является анализ и построение графиков после получения данных из файла Excel. Это приложение может делать одновременно макс. 10 анализируются, и каждый из них выполняется в отдельном потоке в отдельном элементе управления tabPage. Все отлично до того момента, когда появляются 3 проблемы.

  1. Я не могу прочитать данные из одного файла excel, сделать несколько анализов. Если я использую один файл для одного анализа и хочу использовать этот же файл для другого, это невозможно, потому что есть некоторый массаж, который этот файл фактически использует другим процессом. Чтобы прочитать данные из файла excel, я использую схему oleDBConnection. Как решить эту проблему.

  2. У меня такая же проблема с записью данных в один файл. Как заставить мое приложение записывать одно и то же сообщение из разных потоков в один файл.

  3. Если я хочу закрыть свое приложение (когда работает один из анализаторов), мне показывают какое-то сообщение с сообщением: "Прерывание продолжалось в потоке (или что-то в этом роде)". Я не знаю почему. я поддерживаю это

Пожалуйста, помогите мне решить эту проблему, потому что я пытаюсь решить ее с понедельника, и нет никакого эффекта :(


person Karol    schedule 23.02.2011    source источник
comment
Используете ли вы объекты Excel для открытия 2 файлов? или это всего лишь один документ Excel? Если это всего лишь 1 документ Excel, который, как я думаю, является вашим случаем, и вы пытаетесь выполнить 2 варианта многозадачности, можете ли вы создать 2 x WorkBook или 2 x Worksheet копии электронной таблицы, а затем multiTaks 1 из 1 WorkBook, а другой с копией Другой Копии книги в другой Переменной? Надеюсь, я имею смысл?   -  person Robbie Tapping    schedule 23.02.2011


Ответы (1)


Возможный пример

string  FullExcelFilePath = "C:\ExcelFile.xls";


Excel.Application xlApp = new Excel.Application()

Excel.WorkBook xlWorkBook1 = xlApp.WorkBooks.Add(FullExcelFilePath);
Excel.WorkBook xlWorkBook2 = xlApp.WorkBooks.Add(FullExcelFilePath);

//then in your first ThreadCall
foreach(Excel.WorkSheet in xlWorkBook1.Sheets)
{
//get what you want
}


//then in your 2nd ThreadCal
foreach(Excel.WorkSheet in xlWorkBook2.Sheets)
{
//get what you want
}

ДРУГОЙ вариант, который вы могли бы сделать, это:

Вы можете сделать копию Xls для другого потока, а затем

используйте копию файла xls в другом потоке.

File.Copy(strFileName, strDestination);

потом потом удалить

File.Delete(strFileNameSecondVersion)
person Robbie Tapping    schedule 23.02.2011