在 64Bit 上WPF 的事件觸發失效??

摘要:在 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