我正在开发一个WPF应用程序,它有时会出现奇怪的问题并且似乎挂在UI中.它是不一致的,它发生在不同的页面中,但它经常发生,这是一个大问题.我应该提一下,这不是真正的挂起,如下所述.
我的第一个想法是,一些按钮的动画是问题,因为它们在大多数页面上使用,但在删除它们之后仍然会出现挂起,尽管看起来有点不常见.当挂起发生时我试图闯入调试器; 但是从来没有任何代码可供查看.我的代码没有运行.我也注意到"挂起"并不完整.我有代码可以让我拖动表单(它没有边框或标题)继续工作.我也有我赢得的关闭按钮,当我点击它时功能.当我的代码运行时,单击按钮似乎实际工作,但UI根本不会更新以显示新页面.
我正在寻找任何建议,工具或技术来追踪这个奇怪的问题,所以如果你有任何想法,我将非常感激.
编辑:它刚刚再次发生,所以这次当我试图闯入调试器时,我选择"显示反汇编".它带我到MS.Win32.UnsafeNativeMethods.GetMessageW.堆栈跟踪如下:
[Managed to Native Transition]
WindowsBase.dll!MS.Win32.UnsafeNativeMethods.GetMessageW(ref System.Windows.Interop.MSG msg,System.Runtime.InteropServices.HandleRef hWnd,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(System.Windows.Threading.DispatcherFrame frame)+ 0x49 bytes
WindowsBase.dll!System.Windows.Threading. Dispatcher.Run()+ 0x4c字节
PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore)+ 0x1e bytes
PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window)+ 0x6f bytes PresentationFramework.dll!System.Windows.Application.运行(System.Windows.Window窗口)+ 0x26字节PresentationFramework.dll!System.Windows.Application.Run()+ 0x19字节WinterGreen.exe!WinterGreen.App.Main()+ 0x5e字节C#[本机到托管转换]
[管理原生过渡]
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(object state)+ 0x66 bytes
mscorlib.dll!System.Threading. ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,object state)+ 0x6f bytes
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart()+ 0x44 bytes
Alan Le.. 6
由于性能问题,您的WPF应用程序可能会挂起.尝试使用Perforator查看您是否有任何软件渲染的部件,或者您的应用程序是否使用了太多的视频RAM.
由于性能问题,您的WPF应用程序可能会挂起.尝试使用Perforator查看您是否有任何软件渲染的部件,或者您的应用程序是否使用了太多的视频RAM.
尝试删除窗口的无边框行为,看看是否有帮助.另外,你是在BeginInvoke()'或'Invoke()'进行任何长时间运行的操作吗?
另一件需要注意的事情:当你闯入代码时,尝试查看主线程以外的线程.其中一个可能是阻止UI线程.