我正在設計一個遵循MVVM模式的WPF應用程序。但是當涉及到多線程問題時,我發現我的知識相當有限。我的問題與標題完全相同:我可以在工作線程中創建ViewModel
對象嗎?我可以從工作線程初始化ViewModel嗎?
目前我們沒有使用任何依賴注入,所以我只是在UI線程的View
的構造函數中創建ViewModel對象(我想這不是最佳實踐)。但是現在有一個問題:我們有一個核心類,我們稱之爲CoreContext
,來自我們的遺留軟件,它負責許多核心任務,我們的軟件和數據庫之間的數據訪問層就是其中之一。我們的ViewModel
許多人持有對CoreContext
作爲數據成員的一個引用。不幸的是,這個類不是線程安全的。當我在UI線程中創建ViewModel
實例(並因此創建CoreContext
實例)時,確保CoreContext
只能在擁有線程中訪問。但是,當涉及一些繁重的數據庫查詢時,UI將無法響應。
所以現在我想知道,是否有可能在非UI線程來實例化ViewModel
(因此CoreContext
實例)所以當VM(最終CoreContext
)正在重查詢的用戶界面可以響應?
你可能會更期待看待/異步。這將允許你的數據庫查詢異步運行,同時仍然在GUI線程上運行。 – GazTheDestroyer
@GazTheDestroyer,顯然,OP在這裏處理傳統的數據訪問層,可能不會將其轉換爲「async/await」。 – Noseratio