André Carlucci

Skeptic .net development

Resolvendo o problema de NullReferenceException no Ad Control

Há um tempo atrás eu mostrei para vocês como usar o Ad Control da Microsoft para adicionar anúncios em sua aplicação no Windows Phone.

Depois de usar algum tempo, percebi que de vez em quando o controle lançava uma NullReferenceException, fazendo minha aplicação desligar.

O que ocorre é um bug no controle de anúncios. Quando um usuário sai da aplicação no meio do download de anúncio e volta para ela novamente, o controle se perde.

Vi na Internet várias formas de resolver o problema, mas todas utilizando eventos da View para adicionar e remover o controle dinamicamente, conforme o usuário navega pela aplicação.

Essas soluções geram muito código “feio” na minha aplicação, sem contar o trabalho de fazer isso em cada View que possui um anúncio (esqueceu em uma delas, já era…).

Mas nem tudo está perdido: aqui vai uma forma limpa e centralizada de resolver o problema. Basta adicionar estas linhas no método Application_UnhandledException do seu App.xaml.

private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) {
            if (e.ExceptionObject.GetType() == typeof(NullReferenceException) &&
                e.ExceptionObject.StackTrace.Contains(“Microsoft.Advertising.Mobile.Shared.WebRequestWrapper.WebRespCallback”))             {
                e.Handled = true;
                return;
            }
            if (System.Diagnostics.Debugger.IsAttached) {
                // An unhandled exception has occurred; break into the debugger
                System.Diagnostics.Debugger.Break();
            }
        }

 Agora toda vez que a excessão ocorrer, vamos simplesmente ignorá-la, sem piedade :)