2010-05-24 4 views
2

В программе я охватываю нить («рабочая нить»). Hera Я копирую некоторые файлы, записывая некоторые данные в базу данных и, в конечном итоге, удаляю некоторые другие файлы или каталоги. Все работает нормально. Проблема в том, что я решил переместить операцию удаления в какой-то другой поток. Таким образом, рабочий поток теперь копирует файлы или каталоги, записывает в базу данных и, если есть необходимость удалить некоторые другие файлы, этот поток охватывает другой поток, а второй поток удаляет необходимые файлы или каталоги.Доступ запрещен из другого потока

Проблема заключается в том, что удаление, используемое для работы на 100%, когда сделано в рабочем потоке, теперь, когда это делается во вторичном потоке, I иногда получает ошибку «Доступ запрещен», и файлы не могут быть удален. И нет, рабочий поток определенно НЕ присоединяется к файлам и каталогам, которые нужно удалить в данный момент.

Иногда (но не всегда) основной поток олицетворяет некоторого пользователя, поэтому при необходимости поток удаления также выполняется под олицетворением, чтобы предоставить необходимые разрешения для удаления файлов, поэтому это не должно быть проблемой.

У кого-нибудь есть ключ, почему это может произойти?

+2

У вас есть антивирус? Это иногда мешает вам при добавлении, изменении и удалении файлов. Я, как правило, добавляю все дерево папок разработки в доверенную зону антивирусного программного обеспечения и, похоже, устраняет проблему. –

+0

Олицетворение предназначено только для текущей темы, поэтому, если вы олицетворяете главную роль, вы не выдаете себя за свою рабочую нить. – Remko

+0

Да, вот почему я сказал: при необходимости удаляемая нить также работает под олицетворением, т. Е. Снова олицетворяет себя. – Lobuno

ответ

3

Используйте Process Explore r, чтобы проверить, что содержит блокировки ваших файлов.

1

Я действительно не думаю, что это связано ... Но попробуйте отключить Prefetch окна. У нас было много проблем, вызванных файлами блокировки Prefetch, которыми мы манипулировали, но это было при запуске приложения. Насколько мне известно, Prefetch должен читать только файлы при загрузке системы и при запуске приложения (в зависимости от текущего значения конфигурации), но, возможно, это тоже происходит при создании нового потока.

Смежные вопросы