2011-03-22 39 views
0

我正在寻找关于我已经分配的项目的建议,我期待看到它是如何“专业地”完成的,或者有任何建议可以使我走向正确的方向。C#关于排队的建议

我有一个服务器部分接受来自客户端的命令并将字节流推送到串行端口。尽管多个客户端可以向这个服务器发送命令,但我们的硬件一次只能处理一个命令。我的问题是在软件端排队。

我实现了一个Queue<T>帮助程序类,该类还将数据插入到包含请求客户端编号,消息数据(写入串口的字节数组)和消息类型(命令描述)的DataSet中。它还将列出DataGrid中的队列命令(在窗体上)。可能不是要走的路,但这是我能想到的唯一的事情,只要保留提出请求的客户和数据并在视觉上显示队列。

我在哪里处理队列的处理?我想过如何处理它的自定义事件,如果DataGrid列表发生更改(项目添加/删除),抓住DataSet中的第一行数据并将其发送到串行端口。

任何意见或建议,非常感谢。

谢谢。

编辑:我忘了补充说,它也需要来自SerialPort的响应,以便将当前执行的命令从队列中删除。

+0

当然,如果你从客户端接受数据,你不想修改/从服务器的数据网格输入它?回应一个新的数据网格项目听起来不像一个糟糕的地方开始 – 2011-03-22 18:38:05

+0

为什么你实现队列类?它已经在你身边了。 – DarthVader 2011-03-22 18:38:40

+0

@Jon Cage:我只是使用DataGrid来显示队列列表(谁的命令是在下一行)。 – mastofact 2011-03-22 18:41:52

回答

0

我会使用数据库表来存储命令的队列。 Web应用程序会将记录添加到队列中并显示队列,然后单独的进程(如Windows服务或控制台应用程序)将从数据库请求下一个命令并将其发送到串行端口。

0

客户端请求可以在任何时候进入,它们可能会由它自己的线程/任务上的某个代理类(WCF?)处理。然后该线程/任务需要与实际处理请求的模型“内部”的任务协调。

一个很好的课程是BlockingCollection

服务器线程将会阻塞,直到集合中有东西可以工作。然后它可以以线程安全的方式从集合中取出并处理它。这样做可以确保请求在到达时可以被接受,但它们一次被处理。

这里想到的总体模式是生产者 - 消费者。

GJ

0

如果它是你可能想看看排队系统如MSMQService Broker QueueRabbitMQ高trasaction Web应用程序。然后,窗口服务可以接收排队的项目并将其发送到串行端口。