У меня есть приложение WinCE C #, которое опрашивает сервер (JAVA) на предмет сообщений, поступающих асинхронно.Чего я хочу добиться, так это того, что я хочу опрашивать сервер, а когда возвращается результат, ставить его в очередь и затем обрабатывать этот результат в другом потоке.Я хочу изолировать поток асинхронного приема от потока процесса, потому что после обработки ответа мне, возможно, придется сделать дополнительные POST для сервера.
Сейчас у меня есть класс, похожий на класс, показанный здесь
http://msdn.microsoft.com/en-us/library/86wf6409%28v=vs.80%29.aspx
для выполнения асинхронных запросов к серверу и чтения ответа.Я изменил класс, чтобы включить пользовательский таймаут, но это не должно иметь значения.
В моем приложении происходит то, что я начинаю опрос в потоке 'pollingThread' и получаю ответ от сервера.В случае тайм-аута ответ будет нулевым, в противном случае я пытаюсь обработать ответ.
Я хочу отправить строку ответа другому потоку, который может обработать ее, в то время как мой pollingThread возвращается к продолжению опроса сервера.Я не могу понять, как получить ответ на другой поток.Я знаю, как это сделать с помощью Monitor.Pulse на больших окнах, но, к сожалению, он недоступен в NETCF 3.5.
Есть идеи?
Спасибо
РЕДАКТИРОВАТЬ: @ Damon8or
Я попытался использовать AutoReset, но по какой-то причине WaitOne () не осознает, что другой поток уже установил событие (), и поэтому пропускает поступающие данные.Вот что у меня есть:
AutoresetEvent _process
объявлен статическим и видим для обоих методов
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();
внутри опроса, у меня есть _process.Set()
после получения строки изсервер.В методе процесса у меня есть:
while (_keepPolling)
{
_process.WaitOne();
string text= MyQueue.Dequeue();
Debug.WriteLine("Returned: " + text
}
И я не вижу печатаемой строки отладки.Метод poll создает и ставит в очередь строку и возвращается к опросу.