2011-11-09 52 views
1

實時模擬過程的我有仿真的過程,由其中模擬器計算一些數據,並以這種方式,與每個迭代的迭代,移動通離散時間。除了該模擬器之外,還必須在某些週期性時間間隔內用新數據更新組件參數。模擬器的組件用於計算迭代。可視化WPF C#的.NET

我的當前模型是基於具有間隔20秒定時器。對於每個計時器滴答,模擬器首先儘可能快地計算20次迭代,並在剩下的時間內(20秒 - 模擬20次迭代的時間),如果新數據可用,它將用新數據更新組件參數。它的作品非常好,但是......

...我使用MVVM模式來實現可視化WPF中,我想的是可視化,一旦當模擬開始,顯示了正確的時間間隔每次迭代的狀態。因此,如果每次迭代都代表1秒鐘的時間間隔,我希望每秒可視化工具改變可視化狀態。我使用可視化器中的timer和模擬器中的狀態緩衝區來完成它。基本上模擬器將隊列中的計算狀態排隊,可視化器爲每個計時器滴答排隊狀態。除了一些例外,它運作良好。

  1. 這很難具有恆定週期的時間間隔(這取決於過程,線程的優先級等),所以隊列將會無限如果觀察儀計時器是慢然後模擬器計時器或其它周圍的方式,當vizualizer更快。
  2. 使用隊列和實現代碼爲我想要可視化的每個數據在我看來都是實現時間開​​銷和內存開銷。

所以我在想替代解決方案。我在可視化器中有一個定時器,並且爲每個計時器滴答,在後臺線程中調用模擬器中新迭代計算的異步方法。在可視化器中的異步回調中,可視化器基於模擬器中的新計算狀態刷新可視化。使用這種方法,我在刷新模擬器的組件時遇到問題,因爲它們需要更多時間來刷新,然後一個計時器間隔持續時間是。也許我可以在新的後臺線程中刷新組件,一旦更新完成,只需在組件中調用方法,將組件的新值複製到組件的參數值。

而且模擬器是實時的,所以必須跟上實時步伐。

這將是有益的,如果你能告訴我什麼方法更好,我怎麼能改善方案也如果有人有更好的方法,我將高興地閱讀它,使用它:)

感謝。

回答

1

因爲您使用的是WPF,所以如果您使用的是databinding,那麼您的用戶界面將在數據更新時自動更新 - 除了一些例外,主要是ObservableCollections中的項目。如果您使用ObservableCollections,則必須綁定到集合中的每個單獨項目。你可以做手工或寫信OC,做它,當你添加一個項目,當您去除項目

+0

我說,我使用MVVM模式(以避免內存泄漏,這是重要的)分離得到的一類,但我有一個例外,我的模型沒有以正常方式實施的「inotify property changed」。我在可視化器中定時器調用視圖模型的更新方法,然後讀取模擬器的狀態,然後在viewmodel屬性發生變化時,inotifypropertychanged被提起。 – Vedran

+0

您是否嘗試過自動(「正常」方式)更新而不是手動? –

+0

我沒有,因爲我不希望該模型知道視圖模型,因爲模型可以在控制檯應用程序中使用,不僅僅是基於WPF的應用程序。但是我正在考慮這種模式會引起無足輕重的變化。另外我想這會考慮秒的方法。 – Vedran