2017-10-18 3 views
1

J'utilise DotNetBrowser, ou au moins essayer, et j'essaye d'obtenir toutes les cases à cocher dans un document.DotNetBrowser DOMNode débogage

public static void SetCodecSettings() 
    { 
     var waitEvent = new ManualResetEvent(false); 
     _mf.Browser.FinishLoadingFrameEvent += delegate(object sender, FinishLoadingEventArgs e) 
     { 
      if (e.IsMainFrame) 
      { 
       waitEvent.Set(); 
       var doc = _mf.Browser.GetDocument(); 
       var html = _mf.Browser.GetHTML(); 
       var checkBoxes = doc.GetElementsByTagName("input"); 
      } 
     }; 
     _mf.Browser.LoadURL(_mf.PattonDeviceUrl + "/codecset.htm"); 
     waitEvent.WaitOne(); 
    } 

Quand je mets un point d'arrêt, donc je peux inspecter tout ce qui est dans les cases à cocher, je reçois l'erreur suivante lors de l'expansion des cases à cocher dans le débogueur: enter image description here

Je ne veux pas désactiver la évaluation de la propriété parce que je veux inspecter le contenu de cet élément. Des suggestions sur la façon de corriger cela?

+1

L'article suivant peut expliquer le comportement observé: https://dotnetbrowser.support.teamdev.com/support/solutions/articles/9000117030-- the-function-evaluation-requires-all-threads-to-run-message-in-debugger-or-quick-watch –

+0

@AnnaDolbina Merci, je vais essayer ça ce soir. – BigDevJames

+0

@AnnaDolbina Cela fonctionne pour le débogage dont j'ai besoin. Si vous mettez cela comme une réponse, je le marquerai comme correct. – BigDevJames

Répondre

3

Le moteur Chromium fonctionne dans un processus distinct. La bibliothèque DotNetBrowser utilise plusieurs threads pour échanger des données entre le moteur Chromium et le côté .NET. Presque toute évaluation implique IPC, parce que DotNetBrowser n'effectue aucune mise en cache de données elle-même.

Lorsque Visual Studio arrête l'application à un point d'arrêt, certains threads DotNetBrowser sont mis en pause. Dans ce cas, la bibliothèque ne peut pas obtenir de données et traiter les demandes du processus Chromium. C'est pourquoi vous ne pouvez pas évaluer les expressions dans le débogueur.

Ce problème est plutôt courant lors du débogage d'applications multiprocessus, pas seulement DotNetBrowser. En guise de solution de contournement, vous pouvez utiliser la journalisation pour afficher les données requises lors de l'exécution.

L'article suivant explique le comportement observé:

https://dotnetbrowser.support.teamdev.com/support/solutions/articles/9000117030--the-function-evaluation-requires-all-threads-to-run-message-in-debugger-or-quick-watch

+1

@tschallacka Merci d'avoir signalé cela. J'ai mis à jour ma réponse avec les informations nécessaires. –

+0

Merci @AnnaDolbina pour la mise à jour de toutes les questions. Pourriez-vous les gars s'il vous plaît laissez tomber sur https://meta.stackoverflow.com/questions/361999/reachout-to-dotnetbrowser et utilisez https://meta.stackoverflow.com/questions/253849/is-it-acceptable-to- use-stack-overflow-as-a-qa-for-a-specific-product et modifie les urls de votre site pour stackoverflow en suivant les directives – Tschallacka