Pergunta

Eu estou trabalhando em um aplicativo WPF que às vezes apresenta problemas ímpares e parece jeito na interface do usuário. É inconsistente, isso acontece em páginas diferentes, mas isso acontece com bastante frequência que é um grande problema. Eu devo mencionar que não é um verdadeiro jeito como descrito abaixo.

Meu primeiro pensamento foi que as animações de alguns botões era o problema, uma vez que são utilizados na maioria das páginas, mas depois de retirar-lhes os trava ainda ocorrem, embora aparentemente um pouco menos frequentemente. Tenho tentado invadir o depurador quando o bloqueio ocorre; no entanto, nunca há qualquer código para a vista. Nenhum código da mina está em execução. Tenho notado também que o "jeito" não está completa. Eu tenho o código que me permite arrastar o torno forma (não tem fronteira ou título), que continua a trabalhar. Eu também tenho o meu botão de fechar won que funciona quando eu clicar nele. Ao clicar em botões aparece para realmente trabalho como meus código é executado, mas a interface do usuário simplesmente nunca atualiza para mostrar uma nova página.

Eu estou procurando algum conselho, ferramentas ou técnicas para rastrear esse problema estranho, então se você tem alguma opinião em tudo, eu agradeceria muito.

EDIT: Aconteceu de novo, desta vez, quando tentei invadir o depurador eu escolhi para "mostrar a desmontagem". Isso me traz à MS.Win32.UnsafeNativeMethods.GetMessageW. O rastreamento de pilha seguinte:

[Managed to Native Transition]  

WindowsBase.dll! MS.Win32.UnsafeNativeMethods.GetMessageW (ref System.Windows.Interop.MSG msg, System.Runtime.InteropServices.HandleRef hWnd, uMsgFilterMin int, 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 (quadro 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 (janela System.Windows.Window) + 0x6F bytes PresentationFramework.dll! System.Windows.Application.Run (janela System.Windows.Window) + 0x26 bytes PresentationFramework.dll! System.Windows.Application.Run () + 0x19 bytes WinterGreen.exe! WinterGreen.App.Main () + 0x5e bytes C # [Nativo para Managed Transição]
[Conseguiu Native Transição]
mscorlib.dll! System.AppDomain.nExecuteAssembly (System.Reflection.Assembly montagem, string [] args) + 0x19 bytes mscorlib.dll! System.Runtime.Hosting.ManifestRunner.Run (checkAptModel bool) + 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 do objeto) + 0x66 bytes
mscorlib.dll! System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, callback System.Threading.ContextCallback, estado do objeto) + 0x6F bytes
mscorlib.dll! System.Threading.ThreadHelper.ThreadStart () + 0x44 bytes

Foi útil?

Solução

Tente remover o comportamento sem fronteiras da sua janela e ver se isso ajuda. Além disso, você está BeginInvoke () 'ing ou Invoke ()' ing qualquer operação de execução longa?

Outra coisa a olhar para: Quando você entrar no seu código, tente olhar para além do seu segmento principal threads. Um deles pode estar bloqueando o segmento interface do usuário.

Outras dicas

Seu aplicativo WPF pode ser pendurado devido a problemas de desempenho. Tente usar Perfurador para ver se você tem todas as peças que são software prestados ou se você aplicativo está usando muita memória RAM de vídeo.

Uma grande ferramenta é Snoop . Muito bom para olhar para o que os objetos WPF são exibidos na árvore visual em um determinado momento. Eu não tenho certeza de quanto ele vai ajudar, mas é possível que você está tocando o segmento interface do usuário com um monte de coisas extras que tem para fazer. Snoop pode ser capaz de ajudá-lo a rastrear o que está na tela para lhe dar uma idéia do que procurar.

Eu removi o comportamento sem fronteiras como sugerido por Bob King. Até à data, que parece ter se livrado do problema.

Agora, a questão é, por que e como posso resolver o problema? O produto é projetado para ter nenhuma borda com alguns cantos arredondados e peças transparentes.

Hurra, ... parece que o problema não está relacionado com janelas sem margem (pelo menos no meu caso).

Há uma grande queda de desempenho quando você definir AllowsTransparency para true. Tanto de um hit ao que parece, que a coisa toda pode pendurar o segmento. comportamento muito estranho. Pode estar relacionado com este bilhete

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top