0x88980406 SyncFlush () ...есть ли обходной путь?

Я получаю это исключение в моем приложении. Я нашел ссылки, обсуждающие его в интернете, но ничего не указывающее, как его отследить и/или обойти.

пожалуйста, не отвечайте ссылками из интернета. Пожалуйста, ответьте стратегиями отслеживания источника. Пожалуйста, ответьте обходными путями, если вы их нашли.

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)

3 ответов


Это старый, но я все равно отвечу, так как у меня была та же проблема, которую я только что решил.https://stackoverflow.com/a/18003004/1415307

в основном, моя проблема с этой ошибкой сводилась к устаревшему драйверу видеокарты. После обновления до новейшего драйвера проблема была решена.


в моем случае оказалось, что рассматриваемое приложение уже нажимало на пределы памяти своего специализированного оборудования. Всякий раз, когда я добавлял код, который использовал приличный объем памяти, это появлялось.

Я закончил использование механизма MemoryFailPoint, когда я реализовал функцию, которая поместила обработку буфера изображения в другой поток.

http://msdn.microsoft.com/en-us/library/system.runtime.memoryfailpoint.aspx

первый реализация сделала трюк, но после многих попыток QA вызвала бомбу OOM. Поэтому я реализовал MemoryFailPoint() с GC.Collect () loop (хакерский я знаю...но иногда...get er done).

главное, что я узнал... a) это действительно плохая ошибка в WPF. б) вам нужно беспокоиться об этом только в том случае, если вы действительно потребили чрезмерный объем памяти.


с отличной помощью Microsoft мы только что решили проблему SyncFlush, которая мучила нас больше года. Оказывается, мы создавали мультимедийные таймеры в собственном коде, но не освобождали их каждый раз. Более конкретно, мы называли timeBeginPeriod и timeEndPeriod, но мы вызывали begin больше раз, чем end, создавая утечку ресурсов. Поток рендеринга WPF должен использовать эти таймеры, но мы исчерпали их ограниченный запас (возможно, 65k). В результате поток рендеринга прекратил рендеринг и либо зависнул, либо вызвал сбой. Остерегайтесь таймеров!