thirupathiCst Ответов: 1

Я разработать приложение, как ОРЗ читать он работает нормально, но в некоторых случаях ошибка "accessvilationexception"


ошибка возникает в момент непрерывного считывания изображений после 210 изображений.
мне нужно быстро прочитать более 2000 изображений или больше
я получаю ошибку в строке " objModi.Create(getfile);"

Что я уже пробовал:

if (filecount > i)
{
file_name = (info1[i]).Метод toString();
fileID = имя файла.Заменить (". jpg", "");
getfile = _path + "\ \ " + имя файла;
MovePath = _path + "\ \ " + имя файла;
Растровые Limg = новое растровое изображение(метод getfile);
Растровое изображение img = Limg.Клон (новая система.Рисование.Прямоугольник (x = 100, y = 630, ширина = 1440, высота = 250), Limg. PixelFormat);
int origWidth = img.Ширина;
int origHeight = img.Высота;
float imgRatio = origWidth / origHeight;
float newWidth = pictureBox1. Width;
float newHeight = newWidth / imgRatio;
Изображение picimg = новое растровое изображение (img, Convert.ToInt32 (newWidth), конвертировать.ToInt32(newHeight));
pictureBox1. Image = picimg;
НВФ.Располагать();
Лимг.Располагать();
linklbImagename.Текст = имя_файла;

// HALLTICKET NO
x = 310;
если (x == 310)
{
y = 700; ширина = 300; высота = 70;
Точечный источник = новое растровое изображение(метод getfile);
Bitmap CroppedImage = источник.Клон (новая система.Рисование.Прямоугольник (x, y, ширина, высота), источник.PixelFormat);
pictureBox2.Изображение = новое растровое изображение(CroppedImage);
imgset = getfile;
источник.Располагать();
если (! Directory. Exists (@"D:\OCRREAD\Provisional"))
{
Каталог.CreateDirectory(@"D:\OCRREAD\Provisional");
}
Обрезанное изображение.Сохранить (@"D:\OCRREAD\" + имя файла);
getfile = @"D:\OCRREAD\" + имя файла;
Моди.Документ objModi = новый Моди.Документ();
objModi.Create(getfile);
objModi.ОРЗ(МОДИ.MiLANGUAGES.miLANG_ENGLISH, правда, правда);
MODI. Image image = (MODI.Image)objModi.Изображения[0];
Моди.Макет макет = изображения.Расположение;
string strarray = макет.Текст;
HalTicketvalue = макет.Текст;
HalTicketvalue = HalTicketvalue.Заменить("О", "0").Заменить(" ", "").Заменить(".", "");
Файл.Удалить (getfile);
objModi.Закрывать();
txtHTNo.Text = HalTicketvalue.Отделка();
//Системы.Во время выполнения.InteropServices.Маршал.FinalReleaseComObject(изображение);
//Системы.Во время выполнения.InteropServices.Маршал.FinalReleaseComObject(objModi);
}

// ССЫЛКА НЕТ
x = 260;
если (x == 260)
{
y = 610; ширина = 300; высота = 80;
Точечный источник = новое растровое изображение(imgset);
Bitmap CroppedImage = источник.Клон (новая система.Рисование.Прямоугольник (x, y, ширина, высота), источник.PixelFormat);
pictureBox3.Изображение = новое растровое изображение(CroppedImage);
источник.Располагать();
Обрезанное изображение.Сохранить (@"D:\OCRREAD\" + имя файла);
getfile = @"D:\OCRREAD\" + имя файла;
Моди.Документ objModi = новый Моди.Документ();
objModi.Create(getfile);
objModi.ОРЗ(МОДИ.MiLANGUAGES.miLANG_ENGLISH, правда, правда);
MODI. Image image = (MODI.Image)objModi.Изображения[0];
Моди.Макет макет = изображения.Расположение;
ReferenceValue = макет.Текст;
Файл.Удалить (getfile);
ReferenceValue = ReferenceValue.Заменить (""., "").Заменить(":", "").Заменить(",", "").Заменить("Д", "").Заменить(")", "").Заменить ("и GT;", "").Заменить("Я", "").Заменить("о", "").Заменить (символом"J", "").Заменить (Символом"J", "").Заменить("Х", "").Заменить("]", "").Заменить("О", "0").Заменить("а", "").Заменить(";", "").Заменить(" ", "").Заменить("я", "");
objModi.Закрывать();
txtRefNo.Text = ReferenceValue.Отделка();
}

// СТАТИНОРИЯ НЕТ
x = 1265;
если (x == 1265)
{
y = 95; ширина = 260; высота = 100;
Точечный источник = новое растровое изображение(imgset);
Bitmap CroppedImage = источник.Клон (новая система.Рисование.Прямоугольник (x, y, ширина, высота), источник.PixelFormat);
pictureBox4.Изображение = новое растровое изображение(CroppedImage);
источник.Располагать();
Обрезанное изображение.Сохранить (@"D:\OCRREAD\" + имя файла);
getfile = @"D:\OCRREAD\" + имя файла;
Моди.Документ objModi = новый Моди.Документ();
objModi.Create(getfile);
objModi.ОРЗ(МОДИ.MiLANGUAGES.miLANG_ENGLISH, правда, правда);
MODI. Image image = (MODI.Image)objModi.Изображения[0];
Моди.Макет макет = изображения.Расположение;
stationaryValue = макет.Текст;
Файл.Удалить (getfile);
objModi.Закрывать();
txtStationary.Text = stationaryValue.Заменить(":", "").Заменить("О", "0").Отделка();
}

1 Ответов

Рейтинг:
2

Bernhard Hiller

Эта строка существует несколько раз в вашем фрагменте кода... Но так или иначе, она находится внутри повторяющейся последовательности:

CroppedImage.Save(@"D:\OCRREAD\" + file_name);
getfile = @"D:\OCRREAD\" + file_name;
MODI.Document objModi = new MODI.Document();
objModi.Create(getfile);

Bitmap.Save возвращается быстро, операционная система все еще может записывать файл на диск. И в течение этого времени вы не можете открыть файл для чтения (который MODI. Document.Создавать надо делать).
Как решить эту проблему? Пробуя и снова пробуя после короткой нити.Спите ограниченное количество раз.

Кстати, вы должны сделать много рефакторинга. Существует много кода копирования-вставки, и фреймворк предлагает лучшие варианты для некоторых задач.
Например, определите путь в одном месте
string OcrReadPath = @"D:\OCRREAD";

используйте System. IO. Path, чтобы обработать его и добавить еще несколько переменных:
string getfile = System.IO.Path.Combine(OcrRead, file_name);
CroppedImage.Save(getfile);
и, конечно же, лучше использовать имена переменных (getfile больше похож на инструкцию, а не на переменную).