C # IFilter неправильно установлен в растворе? - PullRequest
2 голосов
/ 01 октября 2010

С чего начать ....

Я унаследовал приложение, которое ищет строки в файлах от предыдущего программиста (у которого не было документации), используя пространство имен EPocalipse.IFilter. У него есть несколько проблем, первая из которых заключается в том, что в проекте VS отсутствует FilterReader.cs, FilterLoader.cs, и, на мой взгляд, они необходимы для фильтров EPocalipse (на основе моих исследований). Второе - это то, что приложение (при его сборке) висит на ReadToEnd () при запуске.

Я нашел эту тему здесь: TextReader Read и ReadToEnd зависает без исключения

Что было круто ... кроме как не было опубликовано решение = ( Поскольку у меня есть эта и другие проблемы, я решил начать новую тему, так как сначала хочу убедиться, что IFilter установлен правильно. Проект строится, но все еще зависает на определенных файлах (обычно MS Excel).

Например, если я пытаюсь «Перейти к определению» в Visual Studio для создания экземпляра FilterReader, он просто показывает вкладку «FilterReader [из метаданных]». Итак, я предполагаю, что файл FilterReader.cs просто отсутствует (его также нет в проводнике решений проектов), что также может быть причиной проблемы зависания?

Любая помощь очень ценится.

SK

1 Ответ

1 голос
/ 13 декабря 2010

Для получения подробной информации по теме, посмотрите эту статью [CodeProject]

Что касается проблемы с зависанием, то ее нелегко решить. В основном, есть 2 возможных решения:

  1. Примените проверки бесконечного цикла, подобные тем, которые вы нашли в потоке. Тем не менее, некоторые чрезвычайно сложные документы могут все еще висеть внутри IFilter, и вы ничего не можете с этим поделать (IFilter - это COM-компоненты, обычно с закрытым исходным кодом).
  2. Сделайте извлечение двухпотоковым: один поток для отслеживания процесса извлечения и остановки извлечения документов, когда истечет время ожидания, а другой поток для фактического извлечения. Если вы выберете этот путь, помните, что вы, скорее всего, столкнетесь с исключениями нарушения прав доступа, поскольку реализация EPocalypse не имеет COM-защиты для многопоточного доступа к фильтрам ifilter.
...