9 votes

WPF et crash de Windows 10

Nous avons une application WPF qui doit rester ouverte pendant une longue période (toute la nuit) avec différents utilisateurs qui se connectent et se déconnectent de leur PC respectif.

[Mise à jour] L'application WPF utilise la technique de l'instance unique à partir d'ici : http://blogs.microsoft.co.il/blogs/arik/SingleInstance.cs.txt La fonction d'instance unique n'est pas à l'origine du bogue.

Un crash étrange se produit uniquement dans la situation suivante :

  1. Le système d'exploitation est Windows 10

  2. La séquence suivante d'ouverture/fermeture de session des utilisateurs doit avoir lieu :

Le compte A démarre l'application et déconnecte ou verrouille l'ordinateur. Le compte B se connecte pendant la nuit, travaille sur l'ordinateur pendant un certain temps, puis se déconnecte. Le compte A se connecte à nouveau le matin. L'application fonctionne mais l'interface utilisateur est gelée/minimisée. Lorsque l'on clique dessus ou que l'on essaie de la redimensionner, l'erreur suivante se produit :

   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)

J'ai déjà examiné ces postes

J'ai essayé les suggestions des messages précédents, mais sans succès.

De plus, je ne peux pas reproduire le problème de manière cohérente. Il semble qu'un certain temps doive s'écouler entre les connexions pour que le problème apparaisse.

Merci pour toute suggestion que vous pourriez avoir.

2voto

Boogier Points 409

System.OutOfMemoryException ou System.Runtime.InteropServices.COMException dans System.Windows.Media.Composition.DUCE.Channel.SyncFlush() sont généralement dues à des fuites d'objets GDI ou d'objets utilisateur.

Vous pouvez surveiller ces fuites dans le Gestionnaire des tâches. Pour ce faire, sélectionnez les colonnes "Objets GDI" ou "Objets utilisateur". Si le nombre d'objets GDI dépasse la limite (10000 par défaut pour Windows), vous obtenez une exception OutOfMemory dans votre application.

Vérifiez votre application pour des fuites de références d'objets de l'espace de noms System.Drawing, des handles d'icônes que vous avez oublié de détruire, etc...

Pour plus d'informations, voir https://blogs.msdn.microsoft.com/dsui_team/2013/11/18/wpf-render-thread-failures/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X