Срочно нужна помощь с WebBrowser контролем
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Срочно нужна помощь с WebBrowser контролем Expand / Collapse
Автор
Сообщение
28.08.2006 17:31


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.06.2007 20:05
Сообщ.: 279, Visits: 3 001
Проблема состоит в том, что этот конроль может инициироваться только в single threading apartment. В моей же программе используются несколько потоков.

Так вот, в определенный момент необходимо открыть форму с WebBrowser контролем на ней и окрыть заданную пользователем веб страницу. В многопоточном режиме WB ругается и выбивает программу.

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


Dim t As New Thread(AddressOf ShowDlgThreadProc)
t.SetApartmentState(ApartmentState.STA)

t.Start()
t.Join()


Фунция потока выглядит так


Private Sub ShowDlgThreadProc()
Dim dlg As New frmWebBrowser
Dim retVal As EnumExecStatus = EnumExecStatus.Passed

dlg.URL = URL

If (dlg.ShowDialog() = DialogResult.Cancel) Then retVal = EnumExecStatus.Failed

dlg.Dispose()
dlg = Nothing

ExecutionStatus = retVal

End Sub

Все работает прекрасно, форма открывается, необходимая веб страница показывается, но ...

...Если пользователь вводит вместо веб адреса, к примеру, локальный путь к директории (например C:\TEMP), то тут возникает проблема. С точки зрения WebBrowser это верный путь и он способен его показать. Если пользователь не выделяет или, тем более, не пытается открыть какой нибудь файл, то после закрытия формы поток заканчивает свою работу правильно и ошибок не возникает.

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

Ошибка такая
No symbols are loaded for any call stack frame. The source code cannot be displayed.

После закрытия этого сообщения в IDE появляется окно Exception со следующим текстом.
LoaderLock was detected
Message: Attempting managed execution inside OS Loader lock. Do not attempt to run managed code inside a DllMain or image initialization function since doing so can cause the application to hang.

Из IDE можно нажать Продолжить и закончить работу правильно, но при самостоятельном выполнении программы на этом все и заканчивается.

Вопросы будут такие
1. Возможно ли другим способом (отличным от приведенного выше) использования этого объекта в много-поточном приложении?

2. Как и где можно попытаться отловить эту ошибку/исключение, чтобы в любом случае продолжить нормальную работу?

3. Если не 1 или 2, то как можно ограничить доступ к локальным директориям для WB контроля?

Спасибо

Сообщ. #903453
30.08.2006 19:27


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 12.06.2007 20:05
Сообщ.: 279, Visits: 3 001
Вопрос решился по-идиотски просто когда я создал новую форму совершенно с нуля, при этом используя те же контроли, названия и код (просто скопировал), а старую форму просто удалил.

После такой манипуляции все заработало и больше ошибок не выдает. Очевидно, что ошибка пряталась где-то внутри ресурсов этой формы, т.е. это ошибка Васика. Выходит, что связи с WebBrowser-ом в общем то и нет?!

Хотя и итересно было-бы узнать, этим страдает только VB Express или в Studio те же проблемы?

Сообщ. #903624
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 10:09