我們有一個運行在不同線程中的多個子系統的應用程序(即一個線程監視GPS,另一個監視RFID閱讀器等)。線程由獨立於win表單部分的服務註冊表啓動和監視。在Win Forms應用程序中處理多個線程的最佳方式
該應用程序的初始版本只有一個表單,它將在更新計時器上運行,並且每秒鐘只檢查每個子系統上的靜態變量的值。
我試圖清理它,因爲我們正在增加額外的表單,而且目前的方法幾乎沒有線程安全性。我希望每個子系統在其基礎狀態發生變化時拋出一個新事件,以便每個表單只能訂閱它所關心的事件,並且我們可以移動到更響應的UI ...我不喜歡更新計時器方法。
因爲在子系統線程中觸發事件,所以我遇到了問題,所以我得到System.InvalidOperationException異常抱怨跨線程調用,當我嘗試更新與事件傳遞的任何狀態的用戶界面。
因此,目前,在閱讀完msdn文檔後,我的選項是對每個我希望更新的字段使用control.invoke,這對於包含大量字段的複雜表單非常惱人,使用後臺工作人員來運行子系統在表單本身中或者仍然在定時器上運行這些表單並查詢子系統本身,這是我試圖避免的。我希望表單儘可能與底層系統分離......他們只應該知道他們關心哪些事件並更新相關字段。
我的問題是,我在這裏錯過了什麼?有沒有更好的方法來構建這個系統,以便子系統可以在自己的線程中運行,但仍然以非耦合的方式發送通知?
任何幫助,將不勝感激
歡呼
nimai