【发布时间】:2012-07-06 21:34:32
【问题描述】:
我有一个 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() 没有意识到另一个线程已经 Set() 事件,因此它错过了通过的数据。这是我所拥有的:
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 方法生成字符串并将其排队,然后返回轮询。
【问题讨论】:
-
你的问题到底是什么?
-
我想确保在另一个线程中处理结果时继续在我的 pollingThread 中进行轮询。在将结果推送到队列后,我不知道如何唤醒处理结果的线程
标签: c# multithreading asynchronous windows-ce