none
applicazione in crash su alcune macchine MS.Win32.SafeNativeMethods.SetTimer RRS feed

  • Domanda

  • Ciao a tutti,

    ho una applicazine  Windows Form, con FW 4.5 che ospita un controllo WPF che, oltre alla griglia contenitore, ha una listivew.

    In alcune macchine, anzi, al momento dovrei dire solo su una, capita che l'applicazione vada in crash e sul registro eventi di windows trovo:

    Versione framework: v4.0.30319
    Descrizione: il processo è stato terminato a causa di un'eccezione non gestita.
    Informazioni sull'eccezione: System.ComponentModel.Win32Exception
       in MS.Win32.SafeNativeMethods.SetTimer(System.Runtime.InteropServices.HandleRef, Int32, Int32)
       in System.Windows.Threading.Dispatcher.SetWin32Timer(Int32)
       in System.Windows.Threading.Dispatcher.UpdateWin32TimerFromDispatcherThread(System.Object)
       in System.Windows.Threading.Dispatcher.UpdateWin32Timer()
       in System.Windows.Threading.Dispatcher.AddTimer(System.Windows.Threading.DispatcherTimer)
       in System.Windows.Threading.DispatcherTimer.Restart()
       in System.Windows.Threading.DispatcherTimer.Start()
       in System.Windows.Controls.VirtualizingStackPanel.EnsureCleanupOperation(Boolean)
       in System.Windows.Controls.VirtualizingStackPanel.OnCleanUp(System.Object)
       in System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
       in System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
       in System.Windows.Threading.DispatcherOperation.InvokeImpl()
       in System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object)
       in System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
       in System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)
       in System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)
       in MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object)
       in System.Windows.Threading.DispatcherOperation.Invoke()
       in System.Windows.Threading.Dispatcher.ProcessQueue()
       in System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
       in MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef)
       in MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object)
       in System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32)
       in System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate)
       in System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32)
       in MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)
       in System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG ByRef)
       in System.Windows.Forms.Application+ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr, Int32, Int32)
       in System.Windows.Forms.Application+ThreadContext.RunMessageLoopInner(Int32, System.Windows.Forms.ApplicationContext)
       in System.Windows.Forms.Application+ThreadContext.RunMessageLoop(Int32, System.Windows.Forms.ApplicationContext)
       in System.Windows.Forms.Application.RunDialog(System.Windows.Forms.Form)
       in System.Windows.Forms.Form.ShowDialog(System.Windows.Forms.IWin32Window)
       in System.Windows.Forms.Form.ShowDialog()

    Mi sembra abbastanza chiaro che il problema venga generato dal controllo WPF ospitato.

    Questa versione di applicazione, al momento, gira in test su poche macchine, quella che mi da problemi è una HP Enterprise con in aggiunta una scheda video Nvidia Quadro P400 con driver video aggiornati, e Windows Server 2019 come sistema operativo.

    Le altre macchine che attualmente girano con la stessa applicazione, e che non presentano il problema, girano su macchine varie ma tutte con Windows 10 Pro.

    Come posso capire dove può essere il problema?

    Grazie a tutti

    Maurizio

     

    lunedì 19 luglio 2021 08:01

Tutte le risposte

  • Aggiungo una informazione,

    sono andato ad intercettare l'errore per poter andare a leggere il codice di errore nativo.

    Il codice di errore è 1158, che se non ho capito male, indica la fine della disponibilità di risorse allocabili, come se avessi creato troppi controlli.

    In realtà il controllo WPF hostato sulla form è una singola ListView, che mostra alcuni dati, anche utilizzando delle immagini. Sul pc che mi da il problema, questa ListView mostra circa 400 righe, e per provare, su un altro pc sto mostrando anche 3000 righe, quindi dubito che il problema sia li.

    Qualche idea?

    lunedì 6 settembre 2021 10:54
  • Ciao a tutti,

    ho capito il problema, e non c'entra niente con WPF.

    A causa di alcuni oggetti che restavano "vivi", non venivano rilasciati dei timers. Tutti questi Timers andavano a consumare le risorse disponibili alla applicazione, fino ad esaurirle, e quindi ad un tentativo da parte di WPF di creare un nuovo handle, veniva generata l'eccezione e il crash della applicazione.

    Ancora non ho capito come mai il gran numero di timers creati e mantenuti vivi, ma questa è un'altra storia.

    Grazie a tutti

    mercoledì 10 novembre 2021 15:12