Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705

Исключение 'System.ArgumentException' при доступе к картинке в WebBrowser

20.07.2014, 13:47. Показов 1962. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно сабж.

В цыкле идет проверка двух картинок, та что в браузере сейчас и та что была рание сохраненная с браузера и присвоена pictureBox1. В цыкле стоит задержка в 500мс. Когда поставить 2000мс то исключения нету.
Короче исключение вылазит когда я в цыкле проверяю одинаковые ли картинки и если они разные я пытаюсь получить доступ к картинке которая сейчас в WebBrowser'е и по ходу он ее как бы уже и загрузил но еще и не загрузил и она типа не доступна, вот и вылазит исключение...

А вот если я тем же методом делаю сравнение картинок самый первый раз то я использую ивент 'webBrowser1_DocumentCompleted', и вот в нем все прекрасно работает при чом картинка появляется сразу же как она появляется в браузере.

Кстати картинку в браузере меняет скрипт(это капча короче), и во время загрузки новой картинки ивент не срабатывает

Вот как мне сделать так что б все работало нормально в этой ситуации?

Добавлено через 10 часов 56 минут
Неужели ни кто не знает?(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.07.2014, 13:47
Ответы с готовыми решениями:

Исключение "System.ArgumentException" в System.Drawing при вызове ellipse.Clear()
Я хочу создать приложение которое будет называться "магический шар" нажимаешь на старт появляеться желто-зеленый шар и он как будто...

Исключение System.ArgumentException
Попробую вкратце рассказать проблему. Существует два таймера, один System.Timer.Timer т.е. многопоточный и второй WinForm Timer. Первый...

Необработанное исключение типа "System.ArgumentException" при работе с нейросетью
Добрый день! Знаю, что такая ошибка не редкость и решения есть. Уверяю Вас я пробовал все, сто понял. Если никто не возражает, то я...

6
 Аватар для igor_fl
63 / 63 / 28
Регистрация: 18.03.2014
Сообщений: 794
20.07.2014, 13:58
Хотя бы код в студию
0
 Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
20.07.2014, 14:44  [ТС]
Ну код такой как я описал в принцепе, ну вот код...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        private void SetImageToCaptchaBox()
        {
            for (int i = 0; i <= 50; i++) // В цыкле 5секунд проверяю изображения на равность
            {
                Invoke((Action)(() => // Так как метод рабготает в потоке, проверку произвожу через 'Invoke()'
                {
                    // Ну и дальше получение картинки и проверка (Думаю именно тут происходит Исключение)
                    Image imgFromWebBrowser = GetImage(webBrowser1, webBrowser1.Document.Body.InnerHtml.Substring(
                    webBrowser1.Document.Body.InnerHtml.IndexOf(pathOfCaptchaImgId), lengthOfCaptchaImgId));
                    string img1Hash = GetImageMD5Hash(imgFromWebBrowser, ImageFormat.Png);
                    string img2Hash = GetImageMD5Hash(this.CaptchaBox.Image, ImageFormat.Png);
                    if (img1Hash != img2Hash)
                    {
                        this.CaptchaBox.Image = imgFromWebBrowser;
                        getCaptchaThrd.Abort();
                    }
                }));
                Thread.Sleep(100); // когда ставлю тут 2000 то впринцепе работает, но это не решение..
            }
            // Если цыкл завершился, значит прошло 5 сек и выводится картинка-ошибка
            Invoke((Action)(() => this.CaptchaBox.Image = this.CaptchaBox.ErrorImage));
        }
Ну и на самом деле я даже тольком не знаю в каком именно месте происходит исключение, ибо код работает в потоке через 'Invoke()' и исключение отловить просто не получается, ибо в дебагере в исключение идут весь блок 'Invoke'...

Я был бы даже признателен инфе как сделать адекватный дебаг что б задержка шло в потоке, а то этот доступ к контролам в потоков реально просто выморажевает, гемороя от него просто капец..
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
20.07.2014, 15:05
Цитата Сообщение от siriusED Посмотреть сообщение
getCaptchaThrd.Abort();
siriusED, вам это ни о чем не говорит? Эта строка кода 100500 вызовет ThreadAbortException.
И прерывать потоки - не есть хорошо. Поток должен нормально завершить свою работу.
0
 Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
20.07.2014, 15:15  [ТС]
insite2012, Но исключение во обще не такое ни разу, при чом тут поток, если б была проблема в потоке то было бы именно ThreadAbortException разве нет? А у меня ArgumentException...
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
20.07.2014, 15:24
Цитата Сообщение от siriusED Посмотреть сообщение
А у меня ArgumentException...
Значит еще не добрался код до этого места. Ищите где у вас исключение, ловите его, пишите в конце концов в лог стек вызовов, сразу узнаете когда вылетело исключение и на какой строке.
0
 Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
20.07.2014, 18:17  [ТС]
insite2012, Ну просто этот метод отрабатывает как часы если ставить задержку чуть побольше, и самый первый раз по ивенту окончания загрузки документа в веббраузере тоже отрабатывает нормально, а вот именно в цыкле когда несколько много раз идет вся эта процедура то начинается печаль...

Ну во общем что уж поделать счас буду выяснять где точно исключение... и кто придумал то что нельзя с потока к контролу обратится просто жесть...

Короче счас найду и отпишусь..

Добавлено через 2 часа 38 минут
Короче проблема была в методе GetImage();
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private Bitmap GetImage(WebBrowser wb, string id)
        {
            HtmlElement e = null;
            e = wb.Document.GetElementById(id);
            
            IHTMLImgElement img = (IHTMLImgElement)e.DomElement;
            IHTMLElementRenderFixed render = (IHTMLElementRenderFixed)img;
 
            Bitmap bmp = new Bitmap(img.width, img.height); // Вот тут исключение
            Graphics g = Graphics.FromImage(bmp);
            IntPtr hdc = g.GetHdc();
            render.DrawToDC(hdc);
            g.ReleaseHdc(hdc);
            return bmp;
        }
Ошибка была, как я и говорил, в том что изображение с браузера бралось но в определенный момент оно было какое то битое или недогруженное до конца шоль...
Во общем через 'Debug.WriteLine()' просмотрел 'Output' для каждой строки кода в методе, и короче как только берется новое изображение исключение вылазит из-за 'img.width\img.height', которые в этот момент равны 0...

Пока что запилил вызов этого метода через try catch, впринцепе работает адекватно..

Ну попробую еще улучшить как нить, но если не получится то впринцепе пусть будет так ниче страшного, ибо прога не на миллион...

Ну и плюс действительно в оутпуте есть 'A first chance exception of type 'System.Threading.ThreadAbortException' occurred in mscorlib.dll'

Ну оно впринцепе мне тоже не мешает на данный момент, но если есть еще какой норм способ как убить поток был бы признателен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.07.2014, 18:17
Помогаю со студенческими работами здесь

Не могу перехватить исключение System.ArgumentException
Вот кусок кода: try { StreamReader sr = File.OpenText(path); for (int i = 0; i...

Необработанное исключение типа "System.ArgumentException" в System.Windows.Forms.dll
Всем привет, пытаюсь сделать переход на форму по кнопке но вылазит следующее: С другими кнопками всё хорошо.

Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll
Доброго времени суток. Имеется проект на C# &amp; Windows Forms. В коде основной формы имеется публичный класс Global_Data с публичными...

Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll
Доброго времени суток. Возникла проблема с загрузкой изображения из базы данных. Вот собственно код: ...

Необработанное исключение типа "System.ArgumentException" в System.Drawing.dll
Доброго времени суток. Возникла проблема с загрузкой изображения из базы данных. Вот собственно код: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru