J'utilise WebBrowser Control dans C# pour vérifier quelques résultats du moteur de recherche, mais parfois sans raison. Ma première pensée a été de faire de chaque fonction de recherche un thread et d'utiliser thread.abort() à partir d'une minuterie, mais je ne pouvais pas gérer avec les contrôles de l'interface utilisateur (y compris le WebBrowser), peu importe ce que j'ai essayé. Quelqu'un a une solution pour moi? un exemple serait grand parce que j'ai déjà essayé tant de choses et je continue à obtenir toutes ces exceptions.Accès aux contrôles via les threads
0
A
Répondre
1
Je crois que vous pouvez utiliser WebRequest dans un environnement de travail & pour éviter les difficultés de traitement du modèle de thread COM. Vous pouvez utiliser WebRequest.Timeout pour gérer tout ce que vous pensez prendre trop de temps.
Essayez quelque chose comme ceci:
static void Main(string[] args)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += backgroundWorker_DoWork;
bg.RunWorkerAsync(new List<object> { "http://download.thinkbroadband.com/512MB.zip" });
while (true) {}
}
private static void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
Console.WriteLine("Starting operation.");
BackgroundWorker bw = sender as BackgroundWorker;
List<object> args = (List<object>)e.Argument;
var url = (string)args[0];
WebRequest request = WebRequest.Create(url);
request.Timeout = 300;
try
{
WebResponse response = request.GetResponse();
Console.WriteLine("Request successful.");
}
catch (Exception ex)
{
Console.WriteLine("Request timed out.");
}
}
WebBrowser est un composant que vous devez utiliser lorsque vous souhaitez intégrer une instance de IE dans votre couche de présentation. Sauf si vous en avez besoin, vous pouvez utiliser quelque chose de plus léger.
0
Utilisez la méthode .invoke() du contrôle: http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx
Il existe d'autres méthodes que vous pouvez utiliser aussi: .BeginInvoke et .EndInvoke pour asynchrone invoque.
if(control.InvokeRequired)
{
control.Invoke(control.delegate);
}
Questions connexes
- 1. Accès aux données entre les contrôles utilisateur
- 2. Accès aux contrôles entre les formulaires
- 3. Accès HashMap sécurisé aux threads
- 4. accès aux contrôles dans loginview
- 5. Accès efficace aux nombreux contrôles Cocoa
- 6. PanelBars/Accès aux contrôles imbriqués MVC
- 7. Accès aux contrôles dans la table ASP.NET
- 8. C# excel addin - Accès aux contrôles
- 9. Accès aux sessions via JavaScript
- 10. Accès aux contrôles Telerik RadGrid CommandItemTemplate
- 11. Accès générique WPF multithread aux contrôles
- 12. Accès aux contrôles internes de UserControl
- 13. Ajout de contrôles utilisateur à l'exécution - accès aux contrôles
- 14. Référence aux contrôles via la fonction javascript
- 15. Libcurl via les threads
- 16. Accès aux images Facebook via HTTPS
- 17. Accès aux données JBoss JMX via JSON
- 18. Ai-je accès aux annotations via Freemarker?
- 19. Accès aux cookies Facebook via codeigniter PHP
- 20. Accès aux messages SQL Server via ADO.NET
- 21. Accès aux vignettes via la boucle for.
- 22. Accès aux propriétés JSON JavaScript imbriquées via les variables
- 23. Accès sécurisé aux threads pour la collecte statique
- 24. ASP.NET Accès aux contrôles créés par AJAX sur postBack
- 25. Accès aux contrôles dynamiques côté client dans ASP5.NET codebehind
- 26. RadGrid CommandItemTemplate: accès aux contrôles dans l'événement ItemCommand
- 27. Accès aux contrôles dans la nouvelle liste listview WPF C#
- 28. ASP.NET: Contrôle utilisateur avec accès aux contrôles qu'il enveloppe
- 29. Accès aux contrôles ajoutés par programmation à la publication
- 30. Ajax TabContainer Question: Accès aux contrôles Web du côté client
Quel est exactement ce que vous voulez vérifier sur ces moteurs de recherche? Pourquoi utilisez-vous un WebBrowser? Tu ne peux pas utiliser un HttpRequest? –