2013-04-18 8 views
5

Ich benutze Awesomium 1.7.0.5, um eine Seite zu laden, füllen Sie einige Textfelder und klicken Sie auf eine Schaltfläche. Ich versuche, eine Textbox mit einem Beispiel aus diesem Thread zu füllen: http://answers.awesomium.com/questions/857/webcontrol-type-in-webbrowser.htmlAwesomium .NET: Dokument ist in DocumentReady Event nicht bereit?

Hier ist mein Code (I WPF-Steuerelement verwendet):

 private void WbAwsOnDocumentReady(object sender, UrlEventArgs urlEventArgs) 
     { 
      if (wbAws == null || !wbAws.IsLive) 
       return; 

      //Thread.Sleep(555); 

      dynamic document = (JSObject)wbAws.ExecuteJavascriptWithResult("document"); 

      if (document == null) 
       return; 

      using (document) 
      { 
       dynamic textbox = document.getElementById("email"); 

       if (textbox == null) 
        return; 

       using (textbox) 
       { 
        textbox.value = "gaaffa"; 
       } 

      } 
     } 

Es funktioniert aber nur mit Thread.Sleep für 0,1-0,5 sek. Andernfalls ist das Dokument leer (nicht null) und/oder das Textfeld ist null. Was soll ich tun? Warum ist es in DocumentReadyEvent nicht bereit?

+0

Haben Sie das FinishLoading-Ereignis versucht? – KF2

+0

hm ... Es gibt kein solches Ereignis. – AlexP11223

+0

Ich arbeite mit Version 1.6, es hat dieses Ereignis.aber Sie können überprüfen, ob document == null WbAwsOnDocumentReady Methode erneut ausführen, bis das Textfeld Wert – KF2

Antwort

4

Hier ist, wie ich es gelöst:

 WbAws.LoadingFrameCompleted += OnLoadingFrameCompleted; 
    WbAws.Source = new Uri("http://google.com"); 

private void OnLoadingFrameCompleted(...) 
{ 
    if (webView == null || !webView.IsLive || 
     webView.ParentView != null || !e.IsMainFrame) 
    return; 

    LoadingFrameCompleted -= OnLoadingFrameCompleted; 

    // do something 
} 

statt DocumentReady LoadingFrameCompleted und weil es nicht nur ausgelöst wird, wenn ich es brauche aber auch auf App Startup Ich abonniere es kurz vor der Navigation und abmelden, nachdem es. Überprüfen Sie auch, dass es IsMainFrame ist.

bearbeiten: aber mit dieser Lösung wird manchmal Ausnahme ausgelöst, dass das Dokument nicht bereit ist. Also warte ich auch auf Thread.Sleep.