Асинхронное чтение/запись в файл Win32API

Рейтинг: 3Ответов: 1Опубликовано: 20.12.2014

Здравствуйте.

Напоролся на следующую проблему. Мне надо считать из файлов в каталоге первые n строк и занести в другой файл, причем сделать это надо с помощью функций Win32 API (CreateFile, ReadFile, WriteFile и т.д.). Сделать все это синхронно не составило труда, но вот сделать асинхронно (а именно так мне и надо) не выходит. В предпоследний параметр функции CreateFile (flagsAndAttributes) передаю файловый атрибут Overlapped, при этом функция ReadFile сразу начинает возвращать false. Как организовать считывание-запись, понять не могу. Помогите, пожалуйста. Пишу, вообще говоря, на C#, но код на C++ тоже поможет. Главное - использование Win32Api функций и асинхронная работа.

Ответы

▲ 1

Скорее всего, проблема в том, что по умолчанию потоки .NET работают в многопоточном апартаменте, а для вызова функций WinApi нужен однопоточный. Попробуйте пометить методы, которые Вы используете для асинхронного запуска атирбутом STAThread, или при создании потока вызывать SetApartmentState у потока. Правда, всякая асинхронка работает через ThreadPool, которому нужен многопоточный апартамент. Поэтому о синтаксисе BeginDo - EndDo для асинхронного вызова функций WinAPI следует забыть.