Reputation: 91
We have a WPF app that need to stay opened for a longer period of time (overnight) with different users that log on and off to the respective PC.
[Update] The WPF app uses Single Instance technique from here: http://blogs.microsoft.co.il/blogs/arik/SingleInstance.cs.txt
The single instance feature is not a cause for the bug
There is a strange crash happening only in the following situation:
OS is Windows 10
The following sequence of user sign in / sign off must happen:
Account A is starting the app and logs off or locks the PC. Account B signs in during the night, works on the PC for a while and then logs off. Account A signs in again in the morning. The app runs but is the UI is frozen/minimized. When clicked/ tried to be resized, the following error occurs:
System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
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 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
I already reviewed these posts
I tried the suggestions from the above posts with no luck.
Also, I cannot reproduce the problem consistently. It seem that some time needs to pass between the logins so that the problem to appear.
Thanks for any suggestion that you may have.
Upvotes: 9
Views: 5823
Reputation: 609
System.OutOfMemoryException or System.Runtime.InteropServices.COMException in System.Windows.Media.Composition.DUCE.Channel.SyncFlush() are usually caused by GDI objects or User objects leaks.
You can monitor these leaks in Task Manager. Select "GDI objects" or "User objects" columns for this. If GDI objects count exceeds limit (10000 is default for windows) you get OutOfMemory exception in your application.
Check your application for leak of System.Drawing namespace object references, icon handles that you forgot to destroy, etc...
For more information see https://web.archive.org/web/20190201200206/https://blogs.msdn.microsoft.com/dsui_team/2013/11/18/wpf-render-thread-failures/
There is also now a more thorough article here: https://learn.microsoft.com/en-us/troubleshoot/developer/dotnet/framework/general/wpf-render-thread-failures
Upvotes: 2
Reputation: 11
If you are using PNG bitmap images in your app, try changing them to some other format such as BMP, GIF, or JPEG. The .NET framework passes PNG decoding to the video driver, and some drivers have signed/unsigned bugs which can make the request gigabytes of RAM to decode the image, causing out of memory errors.
Upvotes: 1
Reputation: 530
Seems this is known WPF bug: https://github.com/dotnet/wpf/issues/439 No solution yet on June 3, 2020.
Upvotes: 3