Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Создать новую вкладку в tabControl и поместить на нее WebBrowser - C#

Kostya asdfghjkl Ученик (195), закрыт 7 лет назад
Столкнулся с такой проблемой: тыкая по кнопке происходит создание новой вкладки в tabControl, и на нее лепиться WebBrowser:

tab.Controls.Add(browser);

tabControl.Controls.Add(tab);

while(browser.IsBusy)
{
thread.sleep(1000);
}
///
Обработка страницы браузера
///
При обработке страницы - ошибка, похоже пока управление не перейдет форме - браузер не прогрузится и работать с ним нельзя (во всяком случае я так подумал).

Решил создать новый поток и в него же параметром передаю браузер.

thread.sleep(1000); // Предположительно тут жду пока в том потоке браузер придет в адекватное состояние

while(browser.IsBusy)
{
thread.sleep(1000);
}
///
Работа со страничкой браузера
///
Однако начиная с browser.IsBusy вылетает ошибка "Заданное приведение является недопустимым.", а в свойствах browser висит "Вычисление функции требует выполнения всех потоков".

Как быть? Кстати все отрабатывает хорошо если в первом примере перед циклом вставить меседжбокс.
Дополнен 7 лет назад
Ошибка в строке: while(browser.IsBusy)
Дополнен 7 лет назад
System.InvalidCastException не обработано
HResult=-2147467262
Message=Заданное приведение является недопустимым.
Source=System.Windows.Forms
StackTrace:
в System.Windows.Forms.UnsafeNativeMethods.IHTMLDocument2.GetLocation()
в System.Windows.Forms.WebBrowser.get_Document()
в System.Windows.Forms.WebBrowser.get_IsBusy()
в debts.CheckDebts.ya_Debt() в C:\Repos\DPayd\WindowsFormsApplication1\Main.cs:строка 193
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
InnerException:
Лучший ответ
Ибрагим Ругова Мыслитель (7159) 7 лет назад
А че бы не обрабатывать страницы в соответствующем событии броузера? WebBrowser.DocumentCompleted например?

"Решил создать новый поток и в него же параметром передаю браузер."
Не делайте так.
Kostya asdfghjklУченик (195) 7 лет назад
Я это уже делаю, а здесь привел вопрос из интернета который крайне похож на мой
Kostya asdfghjklУченик (195) 7 лет назад
И так я тоже не делаю
Kostya asdfghjklУченик (195) 7 лет назад
Вот кусок кода:
do {
while (webBrowser1.IsBusy)
pause(100);
Application.DoEvents(); // Выполняем другие события системы, пока ИСПОЛНЯЮТСЯ JavaScripts
if (DateTime.Now.TimeOfDay.TotalMilliseconds - now >= 10000)
pause(100);
} while (!checkDebtsFormInited());
Ибрагим Ругова Мыслитель (7159) Что вы хотите? Дождаться пока прогрузится броузер?
Kostya asdfghjklУченик (195) 7 лет назад
А че бы не обрабатывать страницы в соответствующем событии броузера? WebBrowser.DocumentCompleted например?

Потому что на странице сайта ajax
Остальные ответы
Похожие вопросы