NullReferenceException не было обработано пользовательским кодом

На днях у меня были некоторые проблемы с отставанием интерфейса, и после вопроса здесь кто-то предложил использовать оператор using для удаления веб-браузера.

Теперь после его реализации я продолжаю получать:

NullReferenceException не было обработано пользовательским кодом — ссылка на объект не указывает на экземпляр объекта.

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

Вот пример моего кода:

using (System.Windows.Forms.WebBrowser webBrowser1 = 
    new System.Windows.Forms.WebBrowser())
{
    // issue happens here
    if (webBrowser1.Url.AbsoluteUri.Contains("/signup"))
    {
        // rest of the code 
    }  
}

person user1017524    schedule 28.10.2011    source источник
comment
Почему вы используете веб-браузер таким образом? Чего вы пытаетесь достичь? (Вероятно, есть гораздо лучшие альтернативы.) WebBrowser — это объект, предназначенный для отображения веб-страниц в приложениях .NET Forms, который обычно добавляется в форму и т. д.   -  person Paul Sasik    schedule 28.10.2011
comment
Я пытаюсь записать данные в форму. Код для записи в форму находится в той части, которая говорит об остальном коде.   -  person user1017524    schedule 28.10.2011
comment
Вы пытались просто добавить элемент управления браузером в форму через дизайнер? Все может стать намного проще для вас. (Если вы не хотите отображать его на самом деле, вы можете скрыть его в форме.)   -  person Paul Sasik    schedule 28.10.2011
comment
Почти все случаи NullReferenceException одинаковы. Некоторые подсказки см. в разделе Что такое NullReferenceException в .NET?.   -  person John Saunders    schedule 15.05.2014


Ответы (2)


Вы создаете новый экземпляр System.Windows.Forms.WebBrowser

System.Windows.Forms.WebBrowser webBrowser1 = new System.Windows.Forms.WebBrowser();

И теперь вы проверяете свойство webBrowser1.Url...., но на самом деле у вас ничего нет в этом свойстве. Так что, очевидно, вы получите nullreferenceexeption.

И если вы спрашиваете о решении, нет другого решения, кроме изменения подхода, и на самом деле я не могу понять, что вы пытаетесь сделать. Я имею в виду, что это похоже на покупку корзины и начало поиска яблока в ней, предполагая, что в ней уже есть все фрукты... Когда вы только что создаете объект, как в нем уже может быть текст свойства.

может помочь

person Sandy    schedule 28.10.2011
comment
Хорошо, теперь я понимаю. Что я делаю, так это переход на сайт одним нажатием кнопки. В моем событии documentcompleted у меня есть оператор if then, который заполняет данные в форме. Со вчерашнего дня мой интерфейс отстает, и я продолжал получать ObjectDisposedException, и мне рекомендовали использовать оператор using. Теперь я понимаю, что оператор using, который они мне дали, запускает новый браузер, и я получаю нулевую ошибку, потому что в веб-браузере нет URL-адреса. Как я могу сделать так, чтобы все работало без ошибки удаления? - person user1017524; 28.10.2011
comment
я не уверен, почему вы получаете сообщение об ошибке... откуда вы получаете строку URL? нельзя ли проверить наличие регистрационного слова прямо в нем? зачем идти на webbrowser.url?? - person Sandy; 28.10.2011
comment
Я получаю это из Твиттера. Вы говорите, что вместо этого для URL-адреса должен быть оператор if с текстом документа? - person user1017524; 28.10.2011
comment
возможно, да .... поскольку я не знаю вашего сценария, я чувствую, что проверку строки можно выполнить, прежде чем назначать ее в качестве URL-адреса ... кстати, почему вы создаете экземпляр веб-браузера ?? - person Sandy; 28.10.2011
comment
Поскольку у меня была ошибка удаления, и кто-то в другом потоке рекомендовал мне сделать оператор using, в котором я создаю веб-браузер. - person user1017524; 28.10.2011
comment
Я не спрашиваю, почему вы используете оператор using - person Sandy; 28.10.2011
comment
Только что протестировал мой код с помощью DocumentText, и все же интерфейс отставал как сумасшедший. Он замерзает, и я понятия не имею, почему - person user1017524; 28.10.2011
comment
Оператор using создает экземпляр, поэтому используется оператор using. - person user1017524; 28.10.2011
comment
это может помочь c-sharpcorner.com/UploadFile/kapilsoni88/ - person Sandy; 28.10.2011
comment
Нет, в любом случае спасибо, но я не получил большой помощи :/ - person user1017524; 28.10.2011
comment
Я решил проблему. Моя проблема заключалась в том, что в моем цикле for я забыл добавить к нему часть кода, например, у меня было так: for (int i = 0; i ‹ listBox1.Items.Count;) и я забыл поставить: i++ в конце концов. Спасибо за помощь. - person user1017524; 29.10.2011

Учитывая, что вы только что создали элемент управления WebBrowser и еще не установили Url, я рискну и скажу, что Url равно нулю.

person Justin Niessner    schedule 28.10.2011
comment
Как я могу это исправить? Как я уже сказал в посте, у меня возникла ошибка ObjectDisposedException, и кто-то в другом потоке порекомендовал мне использовать оператор using. - person user1017524; 28.10.2011
comment
@user1017524 user1017524 - Не видя остальной части вашего кода, я понятия не имею, что вы пытаетесь сделать. Похоже, вы ожидаете, что элемент управления WebBrowser уже имеет URL-адрес... но если вы не установите его явно, он не будет. - person Justin Niessner; 28.10.2011
comment
Ну, другой код, который у меня есть, — это кнопка, по которой после нажатия можно перейти на сайт. Затем с оператором if, если на сайте есть слово signup в URL-адресе, он выполнит код. - person user1017524; 28.10.2011
comment
@ user1017524 - Вы не можете ссылаться на URL-адрес, если он нулевой, проверьте, не является ли он нулевым, а если нет, выполните if (webBrowser1.Url.AbsoluteUri.Contains(/signup)) - person Security Hound; 28.10.2011
comment
@ user1017524 - Похоже, вы хотите использовать существующий элемент управления WebBrowser. В этом случае создание экземпляра внутри блока using совсем не то, что вам нужно. - person Justin Niessner; 28.10.2011
comment
@JustinNiessner - Если бы он делал это по нажатию кнопки, это было бы правильно, я предполагаю, что это не так. - person Security Hound; 28.10.2011
comment
@Justin Тогда что мне делать? Без этого я получаю удаленную ошибку? - person user1017524; 28.10.2011
comment
@Ramhound Я перехожу на сайт одним нажатием кнопки - person user1017524; 28.10.2011
comment
@ user1017524 - У вас есть ссылка на исходный вопрос? - person Justin Niessner; 28.10.2011
comment
@JustinNiessner stackoverflow.com/questions /7923893/ - person user1017524; 28.10.2011