Je suis en train de créer une application qui permet plusieurs demandes de recherche tout en maintenant l'utilisation de l'interface utilisateur pour permettre l'interaction. Pour les demandes de recherche multiples, j'avais initialement une seule demande de recherche en cours d'exécution avec une interaction utilisateur toujours possible en utilisant un backgroundworker pour cela. Maintenant, je dois étendre ces fonctions en permettant plus de fonctions de recherche et en les mettant simplement en file d'attente. Je ne sais pas si je dois utiliser plusieurs backgroundworkers ou utiliser le threadpool car je veux être capable de connaître le progrès de chaque tâche de recherche à tout moment.
Si j'utilisais le threadpool, tout ce que je ferais serait d'ajouter cela dans la boucle qui est appelée à chaque fois qu'une demande de recherche est faite
ThreadPool.QueueUserWorkItem(AddressOf Search)
mais si j'utilise des backgroundworkers, c'est la seule façon que je connaisse et je ne sais pas comment les ajouter à autre chose qu'un arraylist et je peux appeler reportprogress depuis chaque bgw.
édition :
par exemple, voici mon code actuel
For Each Thread In ThreadList
'Thread.Sleep(500)
SyncLock Me
If searchChoice = "google" Or fromUrl.Contains("google") Then
links = parsingUtilities.GetGoogleLinksFromHtml(fromUrl, html, searchItem)
posts = parsingUtilities.GetPostLinksFromHtml(links)
If links.Count = 0 Then
Exit Sub
End If
Exit For
.....
donc dans le code ci-dessus, les liens et les messages sont des arraylists que j'utilise pour obtenir les URLs dont j'ai besoin et ils sont utilisés pour différents choix de recherche et j'avais initialement le synclock sur les liens et les messages mais quelqu'un d'autre m'a dit d'utiliser le synclock me à la place. Donc de votre point de vue, devrais-je assigner un contrôle de données séparé pour chaque contrôle de recherche et après un temps suffisant verrouiller le bon et le transférer pour l'écrire. merci