Créez le contrôle WebBrowser dans un thread séparé
Lorsque vous essayez de créer un nouveau contrôle WebBrowser à partir de chaque URI dans chaque URI, cliquez sur une série d'URL, vous pouvez rencontrer un problème, c'est-à-dire que le thread se termine avant que le document ne soit entièrement chargé, de sorte qu'il ne déclenchera jamais les déclencheurs de documentcomplete événement.
Afin de résoudre ce problème, un thread STA (unité unique) doit être créé pour pomper le cycle des messages. Cela fournit un environnement approprié pour les composants ActiveX tels que WebBrowser Control. L'exemple de code suivant montre comment y parvenir:
Dans ce code, créez un nouveau thread STA et affectez-le à la variable Th. La méthode setApartmentState () est utilisée pour spécifier que ce thread sera le thread STA. Par la suite, démarrez le thread et appelez la méthode Navigate () sur l'instance BR (WebBrowser) pour accéder à l'URL requise. Enfin, enregistrez le programme de traitement d'événements documentcompleted et utilisez Application.Run () pour démarrer la boucle de message du thread STA.
<code class="language-csharp">private void runBrowserThread(Uri url) { var th = new Thread(() => { var br = new WebBrowser(); br.DocumentCompleted += browser_DocumentCompleted; br.Navigate(url); Application.Run(); }); th.SetApartmentState(ApartmentState.STA); th.Start(); } void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { var br = sender as WebBrowser; if (br.Url == e.Url) { Console.WriteLine("已导航到 {0}", e.Url); Application.ExitThread(); // 停止线程 } }</code>
Lorsque le document est chargé, le programme de traitement d'événements Browser_DocumentCompleted sera effectué. Il vérifie si l'URL chargée correspond à l'URL cible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!