2013-10-06 24 views
1

我在metro應用程序中使用MVVMLight框架。我開始通過在我的ViewModel構造函數中加載數據,並且一切正常。在構建結束時,我在app.xaml中引入了一些額外的異常處理。mvvmlight windows 8 metro異步加載數據在viewmodel構造函數中

TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; 

這開始引發了很多關於任務未正確等待的錯誤。

我將ViewModel構造函數的數據加載調用移動到我的頁面LoadState方法中,並等待他們在那裏,一切正常。不過,我已經讀過這可能是不好的做法。

我應該以某種方式向ViewModel構造函數引入異步調用嗎?感興趣的最佳實踐可能是什麼?也許我應該刪除異常處理程序!

類似的問題已經在這裏問: MVVM view model and async data initialisation

+0

我有幾個博客文章[在構造函數中執行'async'工作](http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html )和['async' properties](http://blog.stephencleary.com/2013/01/async-oop-3-properties.html),您可能會發現有幫助。 –

回答

1

不知道在哪裏看到LoadState中的數據調用加載是一種不好的做法,在大多數情況下,您甚至無法在加載狀態之前加載數據,因爲您需要通過LoadState傳遞的任何參數。甚至參數也是不需要的我個人更喜歡在LoadState中加載數據,因爲開始在構造函數中加載數據意味着在加載頁面的時候你會花費一些CPU時間,所以它會花費更長的時間加載。我看到在構造函數中加載它的唯一原因是數據在設計時加載(因爲視圖模型的構造函數將被調用,但不是LoadState),但爲此您可以添加一個條件(ViewModelBase.IsInDesignModeStatic)來調用load在構造函數的設計時間

+0

我認爲你是對的,我不記得我在LoadState中加載數據的地方是不好的練習。我使用MVVM Light框架,並在示例代碼/模板中將數據加載到構造函數中。也許是因爲這讓我問了這個問題。 – user1706388

0

首先,一對夫婦的規則:

  1. 確保所有Tasks正在等待
  2. 不要寫async void除了事件處理程序。

這照顧了,檢查你是否仍然有一些錯誤。你可能已經有了一些錯誤,但他們並沒有浮出水面。