Я работаю над приложением WPF, которое иногда проявляет странные проблемы и, кажется, зависает в пользовательском интерфейсе. Это непоследовательно, это происходит на разных страницах, но часто бывает достаточно, что это большая проблема. Я должен упомянуть, что это не правда, как описано ниже.
Моя первая мысль заключалась в том, что анимация некоторых кнопок была проблемой, поскольку они использовались на большинстве страниц, но после их удаления зависания все еще происходят, хотя, по-видимому, немного реже. Я попытался проникнуть в отладчик, когда происходит зависание; однако никогда не существует кода для просмотра. Мой кодекс не работает. Я также заметил, что "зависание" не является полным. У меня есть код, который позволяет мне перетаскивать форму вокруг (у нее нет границы или названия), которая продолжает работать. У меня также есть моя кнопка закрытия, которая работает, когда я нажимаю на нее. Нажатие на кнопки, по-видимому, работает с моим кодом, но пользовательский интерфейс просто не обновляется, чтобы показать новую страницу.
Я ищу любые советы, инструменты или методы для отслеживания этой странной проблемы, поэтому, если у вас есть какие-то мысли, я буду очень благодарен.
EDIT: Это снова произошло, поэтому на этот раз, когда я попытался проникнуть в отладчик, я решил "показать разборку". Это приводит меня к 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 байт
WindowsBase.dll! System.Windows.Threading.Dispatcher.GetMessage(ref System.Windows.Interop.MSG msg, System.IntPtr hwnd, int minMessage, int maxMessage) + 0x48 байт WindowsBase.dll! System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame = {System.Windows.Threading.DispatcherFrame}) + 0x8b байт WindowsBase.dll! System.Windows.Threading.Dispatcher.PushFrame(файл System.Windows.Threading.DispatcherFrame) + 0x49 байт
WindowsBase.dll! System.Windows.Threading.Dispatcher.Run() + 0x4c байт
PresentationFramework.dll! System.Windows.Application.RunDispatcher(игнорирование объекта) + 0x1e байт
PresentationFramework.dll! System.Windows.Application.RunInternal(окно System.Windows.Window) + 0x6f байт PresentationFramework.dll! System.Windows.Application.Run(окно System.Windows.Window) + 0x26 байт PresentationFramework.dll! System.Windows.Application.Run() + 0x19 байт WinterGreen.exe! WinterGreen.App.Main() + 0x5e байты С# Переход к управляемому переходному процессу
[Управляемый для коренного перехода]
mscorlib.dll! System.AppDomain.nExecuteAssembly(сборка System.Reflection.Assembly, строка [] args) + 0x19 байт mscorlib.dll! System.Runtime.Hosting.ManifestRunner.Run(bool checkAptModel) + 0x6e байт mscorlib.dll! System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly() + 0x84 байт mscorlib.dll! System.Runtime.Hosting.ApplicationActivator.CreateInstance(System.ActivationContext activationContext, string [] activationCustomData) + 0x65 байт mscorlib.dll! System.Runtime.Hosting.ApplicationActivator.CreateInstance(System.ActivationContext activationContext) + 0xa байт mscorlib.dll! System.Activator.CreateInstance(System.ActivationContext activationContext) + 0x3e байт
Microsoft.VisualStudio.HostingProcess.Utilities.dll! Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone() + 0x23 байт
mscorlib.dll! System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта) + 0x66 байт
mscorlib.dll! System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executeContext, System.Threading.ContextCallback callback, состояние объекта) + 0x6f байт
mscorlib.dll! System.Threading.ThreadHelper.ThreadStart() + 0x44 байта