2013-04-11 61 views
1

我工作om項目基地在WPF .net 4與棱鏡4.0, 我升級我的機器從Windows 7到Windows 8, 項目崩潰時,達到點活動視圖的WPF + PRISM在Windows 8 region.active崩潰

object view = s.GetView(viewName); 

if (view != null) 
{ 
    theRegion = (Region)s; 
    s.Activate(view); 
} 

唯一的例外發生在該行s.Activate(視圖) 異常的詳細信息是「值不能爲null.Parameter名:鑑於」

這很奇怪,因爲我檢查視圖不爲空。
在Windows 7上工作

有什麼建議嗎?

感謝

亞伊爾

回答

0

Hmmmm,這似乎是一個線程問題給我。是否還有另一段代碼可能會並行運行,並且獲取視圖,並在if語句和Activate方法被調用之間進行修改?

如果是這樣,double-check locking pattern將解決您的問題。

if (view != null) 
{ 
    lock (myLock) // myLock is just a static object 
    { 
     if (view != null) 
     { 
      theRegion = (Region)s; 
      s.Activate(view); 
     } 
    } 
} 

當然,你還需要在其他地方鎖定myLock你在哪裏修改你的看法。

+0

謝謝,但它不工作 亞伊爾 – YairT 2013-04-11 15:51:59

+0

OK 我調試與棱鏡源代碼的問題,這是我發現的, 這是流當我激活視圖: IsActive >> OnItemMetadataChanged >> NotifyAdd >> OnCollectionChanged >> ActiveViews_CollectionChanged 的ActiveViews_CollectionChanged函數調用兩次, 第一與通知新視圖...添加 和第二舊觀點與通知... Reove 第一個電話後到達線this.Region .Deactivate(this.hostControl.SelectedItem); 第二次調用到達此行this.hostControl.SelectedItem = null; 那是什麼使null異常後,任何建議? – YairT 2013-04-18 08:18:19