Ошибка: Вы не можете вызывать методы webbrowser, пока они не будут в визуальном дереве - PullRequest
2 голосов
/ 26 апреля 2011

Я начал использовать элемент управления Google AdMob в приложении WP7 и получил исключение.Я считаю, что элемент управления использует веб-браузер внутри него.Я получаю следующую ошибку на своей странице сейчас.Любые предложения о том, как решить эту проблему.

System.InvalidOperationException was unhandled
  Message=You cannot call WebBrowser methods until it is in the visual tree.
  StackTrace:
   at Microsoft.Phone.Controls.WebBrowserDisconnected.NavigateToString(String pszHtml)
   at Microsoft.Phone.Controls.WebBrowser.NavigateToString(String html)
   at Google.AdMob.Ads.WindowsPhone7.WPF.DisplayAdBase.<.ctor>b__7(Object , RoutedEventArgs )
   at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
   at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)

Я использую рецепт навигации WP7 в приложении - http://create.msdn.com/en-us/education/catalog/article/nln-serv-wp7

Я считаю, что элемент управления Google AdMob выдает ошибку во время обратной навигациистек страниц.Итак, если вы перейдете к странице 1, странице 2 (имеет контроль Google AdMob), странице 3, а затем нажмите кнопку «Домой», чтобы вернуться на страницу 1, ошибка выдается на странице 2 во время обратной навигации.

Я не знаю, как решить эту проблему, так как элемент управления веб-браузера находится в пределах элемента управления рекламой Google.Кто-нибудь еще сталкивался с этой проблемой?

Ответы [ 2 ]

3 голосов
/ 02 июня 2011

быстрое решение: в вашем app.xaml.cs это событие ... вставьте исключение ADMOB ...

// Code to execute on Unhandled Exceptions
private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        // An unhandled exception has occurred; break into the debugger
        System.Diagnostics.Debugger.Break();
    }

    else
    {
        //this is the ADMOB exception
        if (e.ExceptionObject.Message == "You cannot call WebBrowser methods until it is in the visual tree.")
            e.Handled = true;

        else
             MessageBox.Show(e.ExceptionObject.Message, "007", MessageBoxButton.OK);
    }
}
1 голос
/ 27 апреля 2011

Я тоже столкнулся с этим, но в моем собственном коде PhoneApplicationPage.

Похоже, конструктор элемента управления пытается вызвать WebBrowser.NavigateToString, но вы можете сказать по исключению, что это недопустимо.Очевидно, что никто на самом деле не тестировал этот код.

Я делал нечто подобное в конструкторе Page, и способ, которым я это исправил, заключался в том, что страница прослушивала событие WebBrowser.Loaded, а затем вызывала WebBrowser.Navigate /NavigateToString.

Если у вас есть доступ к исходному коду элемента управления, попробуйте сделать это - в конструкторе

  1. сохраните html-содержимое в локальной переменной
  2. registerобработчик события WebBrowser.Loaded
  3. в обработчике события передать содержимое HTML в WebBrowser.NavigateToString
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...