摘要:在 64Bit 上WPF 的事件觸發失效??
這幾天遇到一個很神奇的問題!
系統是用 MVC 寫的 WPF 介面的程式,而且是會有需要呼叫不同的執行檔 (exe)
在 32bit 中A 程式起動後,經過Init 、Show、Load 事件後 會呼叫 B 程式起來。
但在 64bit 中 唯獨只有 Loaded 事件無法正常執行
即使在該台電腦上安裝 VS 2008 重新編譯、除錯也是一樣,那個事件就是不會觸發
非常神奇!按 F11 逐一執行不會觸發也不會產生 Exception
乍看之下會覺得是 WPF 的 Event 有問題
OK!馬上進行 Debug 首先分別驗證到底那裡有問題
逐一驗證 其他的事件是否可以正常 「通過」
其他頁面的 Loaded 事件 「有觸發」
回到有問題的頁面的 Loaded 事件,重新用 程式碼指定。「沒觸發」
產生一個新的 Method 來對應 Loaded 事件「通過」
反覆驗證後確認
WPF 的 Event 100% 在 64bit 是正常的 ( 這個會有問題的話,應該早就被發現了 )
重新檢視一下程式碼,寫法當然是正常 但直覺就認為應當是 Compiler 不正確所導致 ( 在 32 bit 都可以執行,當然是ok的啦 )
重新編譯另一個專案
執行
果然 Loaded 事件有正常在運作!!!
真正的原因就是在於當程式在跨執行緒在呼叫時,因32/64的關係導致 事件無法正常去做 Delegate
所以,確實地做 Compiler 是非常重要的!
另外,編譯 64 位元程式的相關問題可以參考以前寫的這篇
http://liveriver.spaces.live.com/blog/cns!3E957722FC02B734!539.entry