簡體   English   中英

設計Windows應用程序以維護跨MDI子窗體的狀態

[英]Designing a windows application to maintain states across MDI child forms

這是一篇很長的文章,我將盡力解釋我開發的應用程序的工作原理,並希望您能為將來的擴展提供幫助。

我需要在C#中設計一個基於Windows的應用程序,該應用程序基本上監視來自外部通信源的事件,並將數據繪制在圖形上。 該應用程序訂閱來自通信對象的事件,並在存在數據事件時更新UI。 這些監視類中的圖形組件將使用通信數據緩沖區中的數據將數據繪制為線形圖。

在此處輸入圖片說明

為此,我創建了一個Factory類,它將根據我提供的Model信息(設備模型類型)實例化特定的監視類(CWindowFirst或CWindowSecond等)。

這些類實現用於初始化,數據獲取和清除操作的標准協定(IFactoryInterface)。 因此,在任何給定的時間點,我都可以實例化特定的類並啟動監視操作以接收數據並在過程中填充圖形。 到目前為止,我可以以圖形形式顯示特定設備的數據。此外,每當主應用程序選擇另一個窗口(即CWindowSecond或CWindowThird)時,我都將銷毀(處置)CWindowFirst的對象。

俗話說“軟件開發唯一不變的就是變更”,提出了一個新的要求,我需要給用戶一個選項,讓圖形具有“暫停/停止”功能。 我應該能夠暫停圖表(即暫停數據通信)並轉到主窗口播放,並且還應該能夠再次打開另一個窗口(CWindowSecond)與圖表一起播放(應該能夠暫停也可以在這里進行交流)。 返回第一個窗口CWindowFirst並恢復先前保存的數據通信。

現在是百萬美元的問題,我如何實現或更確切地說修改現有設計以實現上述功能。

我可以想到以下實現,但是我不確定它是否確實實用。

發出暫停命令后,我將

  1. 在暫停時停止通信(取消訂閱通信事件)。
  2. 將事件數據緩沖區和圖形的狀態保存在集合中。
  3. 退出之前,將完整對象序列化為文件。
  4. 返回相同的格式后,我將反序列化該對象
  5. 從反序列化的對象獲取事件數據緩沖區
  6. 在圖中填充並啟用事件處理程序,以便我繼續從通信層接收事件。

那里的專家在這里我需要您的幫助。 請指導/提出改進建議/分享您的想法

正如HansPassant所說,從視圖中分離數據(或上下文,或管理器,無論如何)。 帶有上下文構造函數注入的Singleton是恕我直言的最佳選擇。

使用單例的非最干凈方式的示例:

public class MonitoringContext {
    public static MonitoringContext CurrentContext = new MonitoringContext();

    // handle generating data
    // handle populating data needed for graph
    // handle other action from other forms as well
}

public class FormGraph : Form{
    // default constructor if you do not have access to MDI
    public FormGraph(){
        this.context = MonitoringContext.CurrentContext;
    }
    public FormGraph(MonitoringContext context){
        this.context = context;
    }
    MonitoringContext context;

    // do whatever you want with context
}

public class FormOther : Form{
    // default constructor if you do not have access to MDI
    public FormOther(){
        this.context = MonitoringContext.CurrentContext;
    }
    public FormOther(MonitoringContext context){
        this.context = context;
    }
    MonitoringContext context;

    // do whatever you want with context
    // any changes reflected at the FormGraph
    // because of same reference and mutability
}

當然,這是外部人員建議的方法,他們不了解需求以及當前架構的內在和詳細內容。 應進行任何調整以滿足要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM