0

フォームにいくつかのタブを持つボタンとタブコントロールがあります。2 番目のタブに webbrowser-control があります。ページの作成にはバックグラウンドワーカーを使用しています。弦:

bw.DoWork += new DoWorkEventHandler((s, e) => { webBrowser.DocumentText = "qwerty"; });

InitializeComponent() と 1 つの文字列の後のフォーム コンストラクターです。

bw.RunWorkerAsync();

ボタンクリックハンドラーで。ボタンを押してアプリケーションを実行すると、「'WebBrowser' コントロールのウィンドウ ハンドルを取得できません。ウィンドウのない ActiveX コントロールはサポートされていません。」というメッセージが表示されます。しかし、前に 2 番目のタブ (Web ブラウザーを持っている) を選択すると、正しく動作します。どうすればこの問題を解決できますか?

4

1 に答える 1

0

ユーザー インターフェイス メソッドのすべての呼び出しを同じスレッドに保持することで、この問題は解決します。DoWorkEventHandler は別のスレッドで実行されますが、RunWorkerCompletedEventHandler は同じスレッドで実行されるため、DoWorkEventHandler にデータの取得 (Web ページの形成) のみを配置し、それを webBrowserAstrHost.DocumentText プロパティに設定して RunWorkerCompletedEventHandler に移動すると、すべてが正しく機能します。

于 2013-07-08T12:08:28.107 に答える