Элемент управления WebBrowser выдает случайное на вид исключение NullReferenceException
В течение нескольких дней я работаю над веб-браузером на основе WebBrowser. После нескольких прототипов, работающих с событиями Threads и DocumentCompleted, я решил попробовать и посмотреть, смогу ли я создать простой и понятный Webscraper.
Цель состоит в том, чтобы создать Webscraper, который неТ вовлечены реальные объекты потока. Я хочу, чтобы он работал в последовательных шагах (то есть перейти к URL-адресу, выполнить действие, перейти к другому URL-адресу и т. Д. И т. Д.).
Это то, что я получил так далеко:
public static class Webscraper
{
private static WebBrowser _wb;
public static string URL;
//WebBrowser objects have to run in Single Thread Appartment for some reason.
[STAThread]
public static void Init_Browser()
{
_wb = new WebBrowser();
}
public static void Navigate_And_Wait(string url)
{
//Navigate to a specific url.
_wb.Navigate(url);
//Wait till the url is loaded.
while (_wb.IsBusy) ;
//Loop until current url == target url. (In case a website loads urls in steps)
while (!_wb.Url.ToString().Contains(url))
{
//Wait till next url is loaded
while (_wb.IsBusy) ;
}
//Place URL
URL = _wb.Url.ToString();
}
}
Я начинающий программист, но я думаю, что это довольно простой код. Тот'Поэтому я не одобряю тот факт, что по какой-то причине программа генерирует исключение NullReferenceException в этом фрагменте кода:
_wb.Url.ToString().Contains(url)
Я только что вызвал метод _wb.Navigate (), чтобы NullReference могбыть в самом объекте _wb. Так что единственное, что я могу себе представить, это то, что объект _wb.Url является нулевым. Но цикл while _wb.IsBusy () должен это предотвратить.
Так что происходит и как я могу это исправить?