none
c# 關於 "呼叫執行緒無法存取此物件,因為此物件屬於另一個執行緒" 的例外預防 RRS feed

  • 問題

  • 小弟寫WPF 應用程式

    在事件發生時 , 常常發生一件問題

    "呼叫執行緒無法存取此物件,因為此物件屬於另一個執行緒" 的例外

    之前我都以

    if (!Dispatcher.CheckAccess( ))
             Dispatcher.Invoke(new Send_State(動作);

    else
             動作( );

    來處理

    但是這類型況不少...尤其在程式複雜之後...因為事件影響到某值 , 值又往往影響某物件 , 而該物件就發生了執行緒的例外

    自從最近開始接觸到MVVM的架構後(還不會用...) , 我想請問的是

    MVVM可以解決這一類的例外問題嗎?

    因為我看到它的架構是以Model來Binding 值給控制項(View)

    所以這樣可以解決"呼叫執行緒無法存取此物件,因為此物件屬於另一個執行緒" 的例外問題嗎?

    感謝回答

    2010年9月15日 上午 03:39

解答

  • 正確的應該是說MVVM模式UI binding的是ViewModel的屬性,所以不會有Invoke問題.
    但程式要能正確的更新ViewModel的屬性為前提.
    使用MVVM一些以往連動的問題很容易就能解決.因為UI都是透過Binding機制來與資料互動,而程式邏輯也是對資料作異動,所以以往程式控制UI的做法在MVVM模式中就不會產生(大部分),簡單來說UI完全跟程式邏輯透過ViewModel分離開了.兩者沒有直接的關係.
    • 已標示為解答 godsing 2010年9月27日 下午 12:08
    2010年9月15日 上午 04:01