wpf - 0x88980406 SyncFlush()... ¿Hay alguna solución?
crash wpf-4.0 (3)
Con la excelente ayuda de Microsoft, acabamos de resolver un problema de SyncFlush que nos ha atormentado durante más de un año. Resulta que estábamos creando temporizadores multimedia en código nativo, pero no los estábamos liberando todas las veces. Más específicamente, llamamos timeBeginPeriod y timeEndPeriod, pero llamamos begin más veces que end, creando así una fuga de recursos. El subproceso de representación de WPF necesita usar esos temporizadores, pero agotamos un suministro limitado de ellos (quizás 65k). El resultado fue que el subproceso de renderización dejó de renderizarse y se colgó o causó un bloqueo. ¡Cuidado con los temporizadores!
Obtengo esta excepción en mi aplicación. He encontrado enlaces que lo discuten en la web, pero nada indica cómo rastrearlo y / o solucionarlo.
Por favor, no responda con enlaces de internet. Por favor, responda con estrategias de seguimiento de la fuente. Por favor, responda con soluciones alternativas si las encontró.
Source: PresentationCore
Message: Exception from HRESULT: 0x88980406
Stack Trace:
at System.Windows.Media.Composition.DUCE.Channel.SyncFlush()
at System.Windows.Interop.HwndTarget.UpdateWindowSettings(Boolean enableRenderTarget, Nullable`1 channelSet)
at System.Windows.Interop.HwndTarget.UpdateWindowPos(IntPtr lParam)
at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Interop.HwndSource.HwndTargetFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
En mi caso, resultó que la aplicación en cuestión ya estaba presionando los límites de memoria de su hardware específico. Cada vez que agregué código que usaba una cantidad decente de memoria, esto surgiría.
Terminé usando un mecanismo de MemoryFailPoint cuando implementé una función que colocaba el procesamiento de un búfer de imagen en otro hilo.
http://msdn.microsoft.com/en-us/library/system.runtime.memoryfailpoint.aspx
La primera implementación hizo el truco pero después de muchos intentos, el control de calidad causó una bomba OOM. Así que implementé un MemoryFailPoint () con GC.Collect () loop (hackish, lo sé ... pero a veces ... es mejor hacerlo).
Lo principal que aprendí es ... a) Este es un error muy malo en WPF. b) Solo tiene que preocuparse si realmente ha consumido una cantidad excesiva de memoria.
Esto es antiguo, pero responderé de todas formas, ya que tuve el mismo problema que acabo de resolver. https://.com/a/18003004/1415307
Básicamente, mi problema con este error se debió a un controlador de tarjeta de video obsoleto. Después de actualizar al controlador más nuevo, el problema se ha resuelto.