バックグラウンドスレッドvb.netからランタイムWebブラウザコントロールを操作する

FraserOfSmeg

私はいくつかのバックグラウンドスレッドでたくさんのウェブブラウザを使おうとしています。これは、デザインビューのフォームに配置したWebブラウザーコントロールを使用する場合は問題ありませんが、実行時に作成される場合は問題ありません。

webbrowsers配列をグローバルに宣言します。

Dim webbroswers(-1) As WebBrowser

次のコードはメインスレッドにあります。

ReDim Preserve webbroswers(somenum)

  For i = 0 To sumnum

            webbroswers(currentbrowsermax + i) = New WebBrowser

  Next

次に、このコードはバックグラウンドスレッドで実行されます。

If webbroswers(num).InvokeRequired Then
    webbroswers(num).Invoke(Sub() webbroswers(num).Navigate(someurl))
Else
    webbroswers(num).Invoke(Sub() webbroswers(num).Navigate(someurl))

この時点でプログラムがクラッシュし、次のエラーが発生します。

'WebBrowser'コントロールのウィンドウハンドルを取得できません。ウィンドウレスActiveXコントロールはサポートされていません。

これに関するどんな助けも素晴らしいでしょう。また、スクリプトエラーを抑制する方法を誰かが知っているなら、これが役立つかもしれないと思います。私は試しました:WebBrowser(num).ScriptErrorsSuppressed = Trueですが、これは機能しません(メインスレッドで実行している場合、コードの他の場所でも機能しません)ありがとうございます!

ハンスパッサン

Control.InvokeRequiredメンバーとInvokeメンバーは、Handleプロパティを使用して、どのスレッドがコントロールを所有しているかを把握します。問題は、作成したWebブラウザーのハンドルがnullであるということです。コントロールは、フォームに表示した場合にのみ有効なハンドルを持ちます。あなたがしなかったこと。次に、ハンドルを作成しようとしますが、これは失敗したクジラです。WebBrowserのようなActiveXコントロールには有効な親が必要です。Me.Control.Add()がないと、元のバージョンで行われたように、Me.Control.Add()はありません。

回避策は簡単です。有効なHandleプロパティを持つ別のコントロールが必要です。ハンドルの値ではなく、ハンドルを所有するスレッドのみを考慮します。

あなたは1つを持っています:あなたのフォーム。代わりにMe.InvokeRequiredMe.Invoke()使用してくださいまたは、フォームオブジェクトへの参照を簡単に取得できない場合は、Application.OpenForms(0)を使用することをお勧めします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

分類Dev

クロス スレッド アクセス例外をスローするウィンドウ クロムを使用したカスタム ウィンドウ スタイルのバックグラウンド STA スレッド

分類Dev

バックグラウンドスレッドからメインスレッドでUIViewを初期化する

分類Dev

バックグラウンドスレッドでQFileSystemModelのカスタムアイコンを作成する方法

分類Dev

フラグメント内のバックグラウンドスレッドからUIを更新する方法

分類Dev

バックグラウンドプロセスからログをリダイレクトする方法

分類Dev

バックグラウンドスレッドにドキュメントを正しくロードする

分類Dev

メインスレッドからバックグラウンドへの移行

分類Dev

バックグラウンドスレッドからのルームデータベースクエリ

分類Dev

バックグラウンドスレッドからDataContextを更新します

分類Dev

バックグラウンドスレッドから関数を返す

分類Dev

バックグラウンドでのバックグラウンドスクロールを防止する

分類Dev

バックグラウンドスレッドでAndroidネットワーク操作を実行する

分類Dev

AndroidUnity-バックグラウンドスレッドにファイルをロードする

分類Dev

BackgroundWorkerとバックグラウンドスレッド

分類Dev

iOS開始バックグラウンドスレッド

分類Dev

Xamarin.Formsバックグラウンドスレッド

分類Dev

Androidのバックグラウンドスレッド

分類Dev

ScanCallbackのバックグラウンドスレッド

分類Dev

RestSharp非同期バックグラウンドスレッド

分類Dev

処理中のバックグラウンドスレッド

分類Dev

ZeroMQバックグラウンドスレッドの作成

分類Dev

バックグラウンドスレッドでのKotlinrunBlocking

分類Dev

GAEPythonバックグラウンドスレッドの終了

分類Dev

Javaのバックグラウンドスレッド

分類Dev

GMSGeoCoder reverseGeocodeCoordinate:completionHandler:バックグラウンドスレッド上

分類Dev

継承、バックグラウンドスレッド、RAII

分類Dev

Webブラウザコントロールからのドラッグアンドドロップを無効にするc#

分類Dev

バックグラウンドスレッドからコレクション内のアイテムプロパティを更新するときの例外

Related 関連記事

  1. 1

    バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

  2. 2

    クロス スレッド アクセス例外をスローするウィンドウ クロムを使用したカスタム ウィンドウ スタイルのバックグラウンド STA スレッド

  3. 3

    バックグラウンドスレッドからメインスレッドでUIViewを初期化する

  4. 4

    バックグラウンドスレッドでQFileSystemModelのカスタムアイコンを作成する方法

  5. 5

    フラグメント内のバックグラウンドスレッドからUIを更新する方法

  6. 6

    バックグラウンドプロセスからログをリダイレクトする方法

  7. 7

    バックグラウンドスレッドにドキュメントを正しくロードする

  8. 8

    メインスレッドからバックグラウンドへの移行

  9. 9

    バックグラウンドスレッドからのルームデータベースクエリ

  10. 10

    バックグラウンドスレッドからDataContextを更新します

  11. 11

    バックグラウンドスレッドから関数を返す

  12. 12

    バックグラウンドでのバックグラウンドスクロールを防止する

  13. 13

    バックグラウンドスレッドでAndroidネットワーク操作を実行する

  14. 14

    AndroidUnity-バックグラウンドスレッドにファイルをロードする

  15. 15

    BackgroundWorkerとバックグラウンドスレッド

  16. 16

    iOS開始バックグラウンドスレッド

  17. 17

    Xamarin.Formsバックグラウンドスレッド

  18. 18

    Androidのバックグラウンドスレッド

  19. 19

    ScanCallbackのバックグラウンドスレッド

  20. 20

    RestSharp非同期バックグラウンドスレッド

  21. 21

    処理中のバックグラウンドスレッド

  22. 22

    ZeroMQバックグラウンドスレッドの作成

  23. 23

    バックグラウンドスレッドでのKotlinrunBlocking

  24. 24

    GAEPythonバックグラウンドスレッドの終了

  25. 25

    Javaのバックグラウンドスレッド

  26. 26

    GMSGeoCoder reverseGeocodeCoordinate:completionHandler:バックグラウンドスレッド上

  27. 27

    継承、バックグラウンドスレッド、RAII

  28. 28

    Webブラウザコントロールからのドラッグアンドドロップを無効にするc#

  29. 29

    バックグラウンドスレッドからコレクション内のアイテムプロパティを更新するときの例外

ホットタグ

アーカイブ