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)
Ответы
Ответ 1
В моем случае оказалось, что рассматриваемая заявка уже нажимала на пределы памяти своего аппаратного обеспечения. Каждый раз, когда я добавлял код, который использовал приличный объем памяти, это могло бы возникнуть.
В результате я использовал механизм MemoryFailPoint, когда я реализовал функцию, которая помещала обработку буфера изображения в другой поток.
http://msdn.microsoft.com/en-us/library/system.runtime.memoryfailpoint.aspx
Первая реализация сделала трюк, но после многих попыток QA вызвала бомбу OOM.
Таким образом, я реализовал MemoryFailPoint() с циклом GC.Collect() (хакерский, которого я знаю... но иногда... сделайте это).
Главное, что я узнал, это...
a) Это действительно плохая ошибка в WPF.
б) Вам нужно только беспокоиться об этом, если вы действительно потребляете чрезмерное количество памяти.
Ответ 2
Это старо, но я все равно отвечу, так как у меня была такая же проблема, что я только что решил. fooobar.com/questions/350682/...
В основном, моя проблема с этой ошибкой сводилась к устаревшему драйверу видеокарты. После обновления до новейшего драйвера проблема была решена.
Ответ 3
С превосходной помощью Microsoft мы просто решили проблему SyncFlush, которая преследовала нас больше года. Оказывается, мы создавали мультимедийные таймеры в собственном коде, но мы не освобождали их каждый раз. Более конкретно, мы вызывали timeBeginPeriod и timeEndPeriod, но мы вызывали начало больше времени, чем конец, тем самым создавая утечку ресурсов. Поток рендеринга WPF должен использовать эти таймеры, но мы исчерпали ограниченный запас их (возможно, 65 тыс.). В результате поток рендеринга остановил рендеринг и либо повесил, либо вызвал сбой. Следите за таймерами!