J'ai une application WinCE C# qui interroge un serveur (JAVA) pour les messages arrivant de manière asynchrone. Ce que je veux réaliser, c'est que je veux interroger le serveur, et quand un résultat est retourné, mettez-le en file d'attente, puis traitez ce résultat dans un autre thread. Je veux isoler le thread de réception asynchrone du thread de processus, car après le traitement de la réponse, je pourrais avoir à faire des POST supplémentaires au serveur.Le processus asynchrone aboutit à un autre thread
Ce que j'ai pour une classe est maintenant similaire à celui présenté ici
http://msdn.microsoft.com/en-us/library/86wf6409%28v=vs.80%29.aspx
pour faire des demandes async au serveur et la lecture de la réponse. J'ai modifié la classe pour inclure un délai d'attente personnalisé, mais cela ne devrait pas avoir d'importance. Ce qui se passe dans mon application, c'est que je commence à interroger dans un thread 'pollingThread', et obtenir la réponse du serveur. En cas d'expiration d'un délai, la réponse sera nulle, sinon j'essaye de traiter la réponse.
Je veux envoyer la chaîne de réponse à un autre thread qui peut travailler sur le traitement, alors que pollingThread revient pour continuer à interroger le serveur. Je ne peux pas comprendre comment obtenir la réponse sur un autre fil. Je sais comment le faire en utilisant Monitor.Pulse sur de grandes fenêtres, mais malheureusement ce n'est pas disponible sur NETCF 3.5.
Des idées?
Merci
EDIT: @ Damon8or
J'ai essayé d'utiliser AutoReset mais pour une raison quelconque, le WaitOne() ne se rend pas compte que l'autre thread a déjà établi() l'événement et il manque le données à venir. Voici ce que j'ai:
Le AutoResetEvent _process
est déclarée statique et est visible pour les deux méthodes
ThreadStart processMethod= new ThreadStart(process);
processingThread= new Thread(processJSONMethod);
processingThread.IsBackground = true;
processingThread.Start();
ThreadStart startMethod = new ThreadStart(Poll);
connectionThread = new Thread(startMethod);
connectionThread.IsBackground = true;
connectionThread.Start();
intérieur du sondage, j'ai _process.Set()
recevoir après une chaîne à partir du serveur. Dans la méthode du processus, j'ai:
while (_keepPolling)
{
_process.WaitOne();
string text= MyQueue.Dequeue();
Debug.WriteLine("Returned: " + text
}
Et je ne vois pas la ligne de débogage en cours d'impression. La méthode d'interrogation produit et met en file d'attente la chaîne et retourne à l'interrogation.
Quelle est exactement votre question? –
Je veux m'assurer que je continue d'interroger dans pollingThread pendant que le résultat est traité dans un autre thread. Je ne peux pas comprendre comment réveiller un thread qui fait le traitement du résultat après qu'un résultat est poussé dans la file d'attente – Rishi