- PR -

イベント発生まで処理をブロックしたい

1
投稿者投稿内容
YAMANEKO
会議室デビュー日: 2008/06/06
投稿数: 19
投稿日時: 2008-06-10 13:05
イベントドリブンになっている非同期なイベントを、
敢えて同期のように扱うことってできないでしょうか?

一つの関数中で、
  WebBrowserを初期化して、
  WebBrowser.NavigateでURLに移動して、
  ドキュメントが読み込み終わってから
  中身を取り出していろいろ操作して、
  結果を返す、
というようなことをしたいのですが・・・
そもそも、イベント以外でドキュメントを読み込み終わったかどうかを知る方法もわからず・・・
otf
ベテラン
会議室デビュー日: 2006/08/04
投稿数: 91
投稿日時: 2008-06-10 14:08
メッセージループ回してもいいというのであればこんな感じでできましたが、
そもそも同期的に行いたいという理由はなんですか?

コード:
            webBrowser1.Navigate("http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=45170&forum=7");
            bool complated = false;
            webBrowser1.DocumentCompleted += delegate
            {
                complated = true;
            };
            while (!complated)
            {
                Application.DoEvents();
                Application.RaiseIdle(EventArgs.Empty);
            }

渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-06-10 14:08
引用:

イベントドリブンになっている非同期なイベントを、
敢えて同期のように扱うことってできないでしょうか?



ブラウザコントロールに関しては無理です。

メッセージポンプを回さないと、ブラウザコントロールのステートが進まなくなる場面があります。
YAMANEKO
会議室デビュー日: 2008/06/06
投稿数: 19
投稿日時: 2008-06-10 14:26
引用:

otfさんの書き込み (2008-06-10 14:08) より:
メッセージループ回してもいいというのであればこんな感じでできましたが、
そもそも同期的に行いたいという理由はなんですか?



ちょっとしたプログラムしか作れない外部の業者向けに、
関数形式で簡単に使えるライブラリを提供するという要件でして・・・

とりあえず、メッセージループを実装すると出来そうですね。やってみます。
ありがとうございました。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2008-06-10 14:59
http://www.atmarkit.co.jp/fdotnet/dotnettips/687nondispbrowser/nondispbrowser.html
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-06-10 15:26
引用:

とりあえず、メッセージループを実装すると出来そうですね。



安易に DoEvents() するのは危険ですよ。
メッセージループを回す≒ユーザ操作を受け入れるってことなので。
1

スキルアップ/キャリアアップ(JOB@IT)