Estoy trabajando en una aplicación WPF que a veces muestra problemas extraños y parece que cuelga en la interfaz de usuario. Es inconsistente, sucede en diferentes páginas, pero sucede con frecuencia que es un gran problema. Debo mencionar que no es un verdadero problema como se describe a continuación.¿Cómo se solucionan los problemas de la interfaz de usuario de WPF?
Lo primero que pensé fue que las animaciones de algunos botones eran el problema, ya que se usan en la mayoría de las páginas, pero después de eliminarlas aún se producen bloqueos, aunque aparentemente un poco menos a menudo. Intenté entrar en el depurador cuando se produce el bloqueo; sin embargo, nunca hay ningún código para ver. No hay código mío en ejecución. También noté que el "bloqueo" no está completo. Tengo un código que me permite arrastrar el formulario (no tiene borde ni título) que continúa funcionando. También tengo mi botón de cierre ganado que funciona cuando hago clic en él. Al hacer clic en los botones, parece que realmente funciona mientras se ejecuta mi código, pero la interfaz de usuario simplemente nunca se actualiza para mostrar una nueva página.
Estoy buscando algún consejo, herramientas o técnicas para rastrear este extraño problema, por lo que, si tiene alguna idea, la agradeceré enormemente.
EDIT: Simplemente sucedió de nuevo, así que esta vez cuando traté de entrar en el depurador elegí "mostrar el desmontaje". Me lleva a MS.Win32.UnsafeNativeMethods.GetMessageW. El seguimiento de la pila siguiente:
[Managed to Native Transition]
WindowsBase.dll MS.Win32.UnsafeNativeMethods.GetMessageW (ref System.Windows.Interop.MSG msg, System.Runtime.InteropServices.HandleRef CVent, int uMsgFilterMin, int uMsgFilterMax) + 0x15 bytes
WindowsBase.dll! System.Windows.Threading.Dispatcher.GetMessage (ref System.Windows.Interop.MSG msg, System.IntPtr hwnd, int minMessage, int maxMessage) + 0x48 bytes WindowsBase.dll! System .Windows.Threading.Dispatcher.PushFrameImpl (System.Windows.Threading.DispatcherFrame frame = {System.Windows.Threading.DispatcherFrame}) + 0x8b bytes WindowsBase.dll! System.Windows.Threading.Dispatcher. PushFrame (marco System.Windows.Threading.DispatcherFrame) + 0x49 bytes
WindowsBase.dll! System.Windows.Threading.Dispatcher.Run() + 0x4C bytes
PresentationFramework.dll! System.Windows.Application.RunDispatcher (objeto ignorar) + 0x1e bytes
PresentationFramework.dll! System.Windows.Application.RunInternal (ventana System.Windows.Window) + 0x6f bytes PresentationFramework.dll! System.Windows.Application.Run (ventana System.Windows.Window) + 0x26 bytes PresentationFramework.dll! System.Windows.Application.Run() + 0x19 bytes WinterGreen.exe! WinterGreen.App.Main() + 0x5E bytes C# [Originario de transición controlada]
[Gestionado a Nativ e Transición]
mscorlib.dll! System.AppDomain.nExecuteAssembly (System.Reflection.Assembly assembly, string [] args) + 0x19 bytes mscorlib.dll! System.Runtime.Hosting.ManifestRunner.Run (bool checkAptModel) + 0x6e bytes mscorlib.dll! System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() + 0x84 bytes mscorlib.dll! System.Runtime.Hosting.ApplicationActivator.CreateInstance (System.ActivationContext ActivationContext, string [] activationCustomData) + 0x65 bytes mscorlib .dll! System.Runtime.Hosting.ApplicationActivator.CreateInstance (System.ActivationContext activationContext) + 0xa bytes mscorlib.dll! System.Activator.CreateInstance (System.ActivationContext activationContext) + 0x3e bytes
Microsoft.VisualStudio. HostingProcess.Utilities.dll! Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() + 0x23 bytes
mscorlib.dll! System.Threading.ThreadHelper.ThreadStart_Context (estado de objeto) + 0x66 bytes
mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback de devolución de llamada, el estado del objeto) + 0x6F bytes
mscorlib.dll! System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes
Hay ocasiones en que se ejecuta algún proceso asincrónico; sin embargo, este comportamiento puede ocurrir en cualquier momento, incluido justo después del inicio cuando casi no se ha ejecutado nada. Intentaré eliminar el comportamiento sin bordes. – palehorse
Solo una nota para otras personas que lean esto en el futuro: operaciones de larga ejecución de Never Invoke() o BeginInvoke() en su despachador. Su interfaz de usuario parecerá colgarse ... use un hilo o BackgroundWorker o algo similar. –
Bob tiene razón, si está haciendo demasiado en el hilo de la interfaz de usuario a la vez, la interfaz de usuario dejará de responder. Desea hacer lo menos posible en el hilo de UI; cualquier operación grande debería hacerse en un hilo de fondo. –