Auteur de questions
Problème d'application qui plante !

Discussion générale
-
Bonjour,
Je suis confronté à un erreur que je n'arrive pas à corriger. Je développe une application WPF avec le pattern MVVM Light et de manière aléatoire l'application plante et se ferme. Voici ce que j'ai pu récupérer dans les logs de Windows :
Nom du journal :Application Source : .NET Runtime Date : 25/01/2013 14:45:58 ID de l’événement :1025 Catégorie de la tâche :Aucun Niveau : Erreur Mots clés : Classique Utilisateur : N/A Ordinateur : durabook5 Description : Application : StartApp.exe Version du Framework : v4.0.30319 Description : l'application a demandé l'arrêt du processus via System.Environment.FailFast(message de la chaîne). Message : Erreur système irrécupérable. Pile : à System.Environment.FailFast(System.String) à MS.Internal.Invariant.FailFast(System.String, System.String) à System.Windows.Documents.TextStore.VerifyTextStoreConsistency() à System.Windows.Documents.TextStore.GrantLock() à System.Windows.Documents.TextStore.GrantLockWorker(LockFlags) à System.Windows.Documents.TextStore.RequestLock(LockFlags, Int32 ByRef) à MS.Win32.UnsafeNativeMethods+ITfMessagePump.GetMessageW(System.Windows.Interop.MSG ByRef, IntPtr, Int32, Int32, Int32 ByRef) à System.Windows.Threading.Dispatcher.GetMessage(System.Windows.Interop.MSG ByRef, IntPtr, Int32, Int32) à System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame) à System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame) à System.Windows.Application.RunDispatcher(System.Object) à System.Windows.Application.RunInternal(System.Windows.Window) à System.Windows.Application.Run(System.Windows.Window) à StartApp.App.Main()
Je n'arrive pas a comprendre ce qui peut provoquer ce plantage et surtout comment catcher cette erreur ?
Merci d'avance.
- Type modifié Aurel Bera jeudi 21 février 2013 13:10 Discussion
Toutes les réponses
-
Bonjour Quentin,
ça va être dur de t'aider avec simplement une pile d'exécution. Mais à première vue, c'est peut-être un TextContainer qui pose problème (System.Windows.Documents.TextStore.VerifyTextStoreConsistency()).
Dans tous les cas, si cela peut t'aider à trouver d'ou cela provient, sache qu'il est possible de configurer Visual Studio pour pouvoir debugger le framework .NET: tu trouveras plus d'informations en suivant ce lien :http://blogs.msdn.com/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx
C'est peut-être une première piste...
- Modifié Aurel Bera jeudi 7 février 2013 09:29 modif URL
-
-
Bonjour
Dans ce thread vous allez trouver quelques détails même problème :
http://social.msdn.microsoft.com/Forums/uk-UA/wpf/thread/dfbd2526-8953-4ce8-97c2-43246fd251c0
Cordialement,
-
Bonjour,
Un petit retour SVP?
Merci,
Cordialement,
-
Bonjour,
Désolé de ne pas avoir fait un retour plus vite. Mon problème n'est toujours pas résolu.
J'ai essayé de mettre en place le débogage des sources du framework, cela n'a rien donnée. Et de même en héritant de la classe TextBox.
J'ai cependant capturé une erreur au moment du plantage :
Aucune disposition actuellement disponible. à System.Windows.Documents.TextStore.GetVisualInfo(PresentationSource& source, IWin32Window& win32Window, ITextView& view)
Mais cela ne m'avance pas plus. Est-ce que cela vous dit quelque chose ?
Merci
-
Bonjour,
ca ne va pas changer grand chose mais voici une information supplémentaire. La méthode levant la COM Exception est la suivante:
// Returns objects useful for talking to the underlying HWND. // Throws TS_E_NOLAYOUT if they are not available. /// <securitynote> /// Critical: This code calls into PresentationSource.FromVisual to retrieve Source /// The source is also handed out to the callers /// </securitynote> [SecurityCritical] private void GetVisualInfo(out PresentationSource source, out IWin32Window win32Window, out ITextView view) { source = PresentationSource.CriticalFromVisual(RenderScope); win32Window = source as IWin32Window; if (win32Window == null) { throw new COMException(SR.Get(SRID.TextStore_TS_E_NOLAYOUT), UnsafeNativeMethods.TS_E_NOLAYOUT); } view = this.TextView; }
Les exceptions COM arrivent dans la majorité des cas quand des ressources ne sont pas / mal libérées. Dans ta situation, la source n'est pas correctement retrouvée. En continuant un peu dans la méthode PresentationSource.CriticalFromVisual:
/// <securitynote> /// Critical - uses RootSourceProperty. and returns the PresentationSource /// </securitynote> /// <param name="v">The dependency object to find the source for /// <param name="enable2DTo3DTransition"> /// Determines whether when walking the tree to enable transitioning from a 2D child /// to a 3D parent or to stop once a 3D parent is encountered. /// [FriendAccessAllowed] // To allow internal code paths to access this function [SecurityCritical] internal static PresentationSource CriticalFromVisual(DependencyObject v, bool enable2DTo3DTransition) { if (v == null) { throw new ArgumentNullException("v"); } PresentationSource source = FindSource(v, enable2DTo3DTransition); // Don't hand out a disposed source. if (null != source && source.IsDisposed) { source = null; } return source; }
Et encore un peu plus loin: (dans la logique et pour ne pas provoquer l'erreur, la méthode suivante doit soit retourner un NULL, soit retourner une instance non libérée).
///<securitynote> /// Critical - uses RootSourceProperty and returns the PresentationSource ///</securitynote> /// <param name="o">The dependency object to find the source for /// <param name="enable2DTo3DTransition"> /// Determines whether when walking the tree to enable transitioning from a 2D child /// to a 3D parent or to stop once a 3D parent is encountered. /// [SecurityCritical] private static PresentationSource FindSource(DependencyObject o, bool enable2DTo3DTransition) { PresentationSource source = null; // For "Visual" nodes GetRootVisual() climbs to the top of the // visual tree (parent==null) // For "ContentElements" it climbs the logical parent until it // reaches a visual then climbs to the top of the visual tree. DependencyObject v = InputElement.GetRootVisual(o, enable2DTo3DTransition); if (v != null) { source = CriticalGetPresentationSourceFromElement(v, RootSourceProperty); } return source; }
Bref, à mon avis, tu dois avoir une TextBox qui est "disposée" ou qui n'a plus de rendu visuel ce qui provoque l'exception.
Essaye peut-être de t'abonner à "DispatcherUnhandledException".
-
Bonjour,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Aurel
-
Bonjour,
Nous changeons le type de votre question à « Discussion générale ». Si vous avez plus de temps pour réexaminer la question et fournir plus d'informations, n'hésitez pas à modifier le type du thread à « Question ». Si le problème est résolu, s’il vous plaît partagez la solution avec nous afin que la réponse puisse être trouvée et utilisée par d'autres membres de la communauté ayant des questions similaires.
Merci !
Cordialement,