2011-03-22 87 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應用程序。然後,窗口服務可以接收排隊的項目並將其發送到串行端口。