2013-04-18 16 views
5

私はAwesomium 1.7.0.5を使用してページを読み込み、テキストボックスを入力してボタンをクリックします。 (私はWPFコントロールを使用しています)。ここAwesomium .NET:DocumentReadyイベントでドキュメントが準備できていませんか?

http://answers.awesomium.com/questions/857/webcontrol-type-in-webbrowser.htmlが私のコードです:私はこのスレッドから例を使用してテキストボックスを埋めるためにしようとしています

 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"; 
       } 

      } 
     } 

それは0.1-0.5のためだけのThread.sleepで動作します秒である。そうでなければ、ドキュメントは空であり(nullではない)、テキストボックスはnullです。 どうすればよいですか? DocumentReadyEventで準備ができていないのはなぜですか?ここで

+0

FinishLoadingイベントを試しましたか? – KF2

+0

hm ...そのようなイベントはありません。 – AlexP11223

+0

私はver 1.6で作業していますが、このイベントがあります。しかし、document == nullかどうかを確認するには、テキストボックスの値が – KF2

答えて

4

は、私はそれを解決する方法である:

 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 
} 

はDocumentReadyの代わりにLoadingFrameCompleted、私はそれを必要とするだけでなく、アプリの起動時に、私はちょうど移動する前にそれに加入し、それの後に退会する場合、それだけではない発火するので。 IsMainFrameもチェックしてください。

編集:しかし、この解決策では、ドキュメントが準備できていないという例外をスローすることがあります。だから私はThread.Sleepを使ってそれを待っている。

関連する問題