Wpf 0x88980406 SyncFlush()…是否有解决方法?

Wpf 0x88980406 SyncFlush()…是否有解决方法?,wpf,crash,wpf-4.0,Wpf,Crash,Wpf 4.0,我在应用程序中遇到此异常。 我在网上找到了讨论它的链接,但没有任何说明如何追踪和/或解决它的链接 请不要回复来自互联网的链接。 请回复追踪来源的策略。 如果您找到了解决方法,请回复 Source: PresentationCore Message: Exception from HRESULT: 0x88980406 Stack Trace: at System.Windows.Media.Composition.DUCE.Channel.SyncFlush() at System.

我在应用程序中遇到此异常。 我在网上找到了讨论它的链接,但没有任何说明如何追踪和/或解决它的链接

请不要回复来自互联网的链接。 请回复追踪来源的策略。 如果您找到了解决方法,请回复

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)

这是老生常谈,但无论如何我都会回答,因为我刚才解决了同样的问题


基本上,我的这个错误的问题归结为一个过时的视频卡驱动程序。更新到最新的驱动程序后,问题已得到解决。

在我的例子中,结果是所讨论的应用程序已经对其特定硬件的内存限制施加了压力。每当我添加使用相当大内存的代码时,就会出现这种情况

当我实现了一个特性,将处理图像缓冲区放在另一个线程上时,我最终使用了
MemoryFailPoint
机制

第一次实现成功了,但在多次尝试后,QA引发了OOM炸弹。 所以我用
GC.Collect()
循环实现了一个
MemoryFailPoint()
(我知道这是一个很有技巧的循环,但有时……完成了)

我学到的主要东西是:

  • 这是WPF中非常糟糕的错误
  • 如果你真的消耗了过多的内存,你只需要担心它

  • 在微软的大力帮助下,我们刚刚解决了困扰我们一年多的SyncFlush问题。事实证明,我们是在用本机代码创建多媒体计时器,但并不是每次都释放它们。更具体地说,我们称之为timeBeginPeriod和timeEndPeriod,但我们称之为begin的次数多于end,因此造成了资源泄漏。WPF渲染线程需要使用这些计时器,但我们耗尽了有限的计时器(可能是65k)。结果是渲染线程停止渲染并挂起或导致崩溃。小心计时器

    我认为这篇文章会有帮助,被接受的答案包含了一个调试这个问题的策略列表。有一个非常好的MSDN博客深入地描述了这个问题。简单的回答是,没有单一原因:。我在一台用户计算机上看到相同的异常(30台中只有一台!?),我既不了解问题的确切原因,也不了解解决方案。你能帮忙吗?你能发送一些代码吗?你是如何使用MemoryFailPoint的,尤其是你是如何强迫GarbageCollector释放一些内存的?谢谢,还有,我不明白为什么我的应用程序占用了太多内存。任务管理器中通常有大约50MB的RAM,而该计算机有2GB。我唯一能想到的就是坏掉的垃圾收集器。我的用户整天都在工作,不断地打开和关闭表单。虽然大约有20多个用户做得很好,但这个特定的用户正在摆脱内存异常或原始主题中提到的特定异常。您好@lot抱歉,在StackExchange通过电子邮件发送给我之前,我没有看到您的评论。您可以尝试分析代码中可能包含对象引用的点,以便GC可以完成其工作。您可以调查是否可以移动到.NET的其他版本。在我(过去)的情况下,转移到另一个版本的.NET是不可能的。我一直在使用4.5在我目前的位置,并没有看到这个问题(感谢上帝)。但这是一个错误。这要么与您对WPF框架和DirectX本身的压力有关……要么与问题系统上的驱动程序有关。首先调查这些事情…祝你好运。