Элемент управления 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 () должен это предотвратить.

Так что происходит и как я могу это исправить?