我有我的WPF應用程序崩潰隨機(但每天至少兩次)在Windows應用程序日誌中留下以下消息的問題:WPF應用程序崩潰隨機報告,退出代碼內部錯誤80131506
應用:AppName的.EXE Framework版本:v4.0.30319 說明:該進程被終止,由於在IP XXXXXXXX(XXXXXXXX),退出代碼.NET運行時的內部錯誤80131506.
只給你的背景下,此應用程序在嵌入式上運行運行Windows Embedded Standard 2009的系統,並且與另一個進程一起是設備上運行的唯一應用程序(即使瀏覽器由於不需要而被禁用)。
經過一些反覆試驗後,我隔離了觸發錯誤的代碼。它是安裝在主窗口上的一個鉤子,用於攔截HWND消息以瞭解顯示器何時關閉或處於待機模式。 由於系統配備了觸摸面板,因此當顯示器關閉時,我會用面板覆蓋應用程序主窗口,因此當用戶觸摸顯示器使其退出待機模式時,不會錯誤地單擊其中一個按鈕我的主窗口。當面板本身獲得「點擊」事件時,它會關閉,消失,從而允許用戶恢復正常的操作。
這裏是我實例化鉤和功能,當HWND被截取被調用:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
WindowInteropHelper helper = new WindowInteropHelper(this);
HwndSource.FromHwnd(helper.Handle).AddHook(HwndSourceHookHandler);
}
private IntPtr HwndSourceHookHandler(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
handled = false;
if (msg == WM_SYSCOMMAND && wParam == (IntPtr)SC_MONITORPOWER)
{
if (lParam == (IntPtr)MONITOR_OFF || lParam == (IntPtr)MONITOR_STANDBY)
{
AppName.Shell.canvasStandBy.Visibility = System.Windows.Visibility.Visible;
}
}
return IntPtr.Zero;
}
如果我註釋掉的代碼在Window_Loaded位的崩潰不會再發生了...... 你能指出這段代碼有什麼問題嗎?或者給我一個暗示,讓另一種方式來讓它在顯示器關閉的時候在顯示器上的點擊不能進入底層主窗口?
在此先感謝您的幫助:)
ExecutionEngineException與它們一樣糟糕,您必須破壞內部CLR狀態。通常通過破壞GC堆。片段中沒有任何內容可以輕鬆解釋這一點。您可以考慮的替代方法是使用Dispatcher.BeginInvoke(),以便可見性分配在更合適的時間發生。 –
你看過[http://support.microsoft.com/kb/2640103](http://support.microsoft.com/kb/2640103)? – sthotakura
@sthotakura是的我已經獲得了前幾天從微軟提到的修補程序,將它應用到我的測試系統,但錯誤仍然保持不變:( – Netrunner