我已經開發了一些代碼,從硬件設備接收一系列值,每50ms以名稱/值對的形式出現。我想開發一個發佈/訂閱服務,當某個特定項目的價值發生變化時,可以通知訂閱者。訂閱方法可能如下所示: -C#pub/sub服務 - 如何在後臺線程上觸發事件?
public void Subscribe(string itemName, Action<string, long> callback)
讀取硬件值的代碼將檢查自上次以來是否更改了值。如果是這樣,它將遍歷該項目的任何訂閱者,並調用他們的代表。就目前情況而言,代表們將被調用到不理想的同一線程 - 我需要儘可能快地保持輪詢。在不同的線程上調用回調委託最好的方法是什麼?用戶是否應該通過(說)一個任務/線程,還是應該由出版商負責將這些內容翻轉過來?
請注意,我需要一對夫婦的參數傳遞給委託(項目名稱和它的價值),所以這可能會影響所採取的辦法。我知道你可以將單個「狀態」對象傳遞給任務,但它感覺有點不直觀,需要訂閱者實現一個Action回調委託(然後必須將其轉換爲包含名稱和值的其他類型)。
另外,我假設創建新任務/每一個委託調用會傷害到表演時間,所以某種「池」線程可能會被要求?
小提示:從控制您的形式從不同的線程上讀取數據時,你需要確保你調用它們。最好的方法是'if([CONTROL] .InvokeRequired)'然後'[CONTROL] .Invoke( new MethodInvoker(()=> [GET或SET TO THE CONTROL]); – TheGeekZn 2012-08-16 09:35:46