Я работаю над приложением WPF с TabControl (3 вкладки с textBlocks, метками и dataGrids). Приложение автоматически обновляет данные на этих вкладках, используя фоновые потоки. Все работает отлично, за исключением того факта, что если я переключаю вкладки, когда запускается один из фоновых процессов, он выдает ошибку «Ссылка на объект не установлен на экземпляр объекта» и вылетает приложение. Я настроил DispatcherUnhandledException для обработки любого необработанного исключения в потоке пользовательского интерфейса. Трассировка стека не предоставляет большого количества данных, кроме того факта, что ошибка исходит от TabControl и, возможно, объектов, связанных с выбранной вкладкой. Мой вопрос заключается в следующем: могут ли такие проблемы быть присущи WPF TabControl? Я, как упоминалось ранее, настроил столько обработки ошибок, сколько знаю, но получаю только ошибку «Ссылка на объект ...».
Трассировка стека:
в System.Windows.Controls.ItemContainerGenerator.MoveToPosition (позиция GeneratorPosition, направление GeneratorDirection, логическое значение allowStartAtRealizedItem, GeneratorState & state)
в System.Windows.Controls.ItemContainerGenerator.Generator..ctor (фабрика ItemContainerGenerator, позиция GeneratorPosition, направление GeneratorDirection, логическое значение allowStartAtRealizedItem)
в System.Windows.Controls.ItemContainerGenerator.System.Windows.Controls.Primitives.IItemContainerGenerator.StartAt (позиция позиции генератора, направление GeneratorDirection, логическое значение allowStartAtRealizedItem)
в System.Windows.Controls.VirtualizingStackPanel.MeasureOverride (ограничение размера)
в Microsoft.Windows.Controls.Primitives.DataGridRowsPresenter.MeasureOverride (ограничение размера) в C: \ dd \ WPF_1 \ src \ wpf \ src \ ControlsPack \ WPFToolkit \ DataGrid \ Microsoft \ Windows \ Controls \ Примитивы \ DataGridRowsPre: строка
в System.Windows.FrameworkElement.MeasureCore (Доступный размер)
в System.Windows.UIElement.Measure (Доступный размер)
в System.Windows.ContextLayoutManager.UpdateLayout ()
в System.Windows.ContextLayoutManager.UpdateLayoutCallback (Object arg)
в System.Windows.Media.MediaContext.InvokeOnRenderCallback.DoWork ()
в System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks ()
в System.Windows.Media.MediaContext.RenderMessageHandlerCore (Object resizedCompositionTarget)
в System.Windows.Media.MediaContext.RenderMessageHandler (Object resizedCompositionTarget)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, логическое значение isSingleParameter)
в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (источник объекта, обратный вызов делегата, аргументы объекта, логический isSingleParameter, делегат catchHandler)
в System.Windows.Threading.Dispatcher.WrappedInvoke (обратный вызов делегата, аргументы объекта, логическое значение isSingleParameter, делегат catchHandler)
в System.Windows.Threading.DispatcherOperation.InvokeImpl ()
в System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext (состояние объекта)
в System.Threading.ExecutionContext.runTryCode (объект userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (код TryCode, код возврата CleanupCode, объект userData объекта)
в System.Threading.ExecutionContext.RunInternal (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта)
в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта)
в System.Windows.Threading.DispatcherOperation.Invoke ()
в System.Windows.Threading.Dispatcher.ProcessQueue ()
в System.Windows.Threading.Dispatcher.WndProcHook (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled)
в MS.Win32.HwndWrapper.WndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled)
в MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o)
в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, логическое значение isSingleParameter)в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (источник объекта, обратный вызов делегата, аргументы объекта, логический isSingleParameter, делегат catchHandler)
в System.Windows.Threading.Dispatcher.WrappedInvoke (обратный вызов делегата, аргументы объекта, логическое значение isSingleParameter, делегат catchHandler)
в System.Windows.Threading.Dispatcher.InvokeImpl (приоритет DispatcherPriority, время ожидания TimeSpan, метод Delegate, аргументы объекта, логическое значение isSingleParameter)
в System.Windows.Threading.Dispatcher.Invoke (приоритет DispatcherPriority, метод делегата, объектный аргумент)
в MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
в MS.Win32. UnsafeNativeMethods.DispatchMessage (MSG & msg)
в System.Windows.Threading.Dispatcher.PushFrameImpl (фрейм DispatcherFrame)
в System.Windows.Threading.Dispatcher.PushFrame (фрейм DispatcherFrame)
в System.Windows.Threading.Dispatcher.Run ()
в System.Windows.Application.RunDispatcher (игнорирование объекта)
в System.Windows.Application.RunInternal (окно окна)
в System.Windows.Application.Run (окно окна)
в System.Windows.Application.Run ()
в salesforceConnect.App.Main () в C: \ Users \ jfeltis \ Documents \ Expression \ Blend 3 \ Projects \ salesforceConnect \ salesforceConnect \ obj \ Debug \ App.g.cs: строка 0
Все это бред для меня. Может ли кто-нибудь умнее меня взглянуть и, надеюсь, дать мне какое-то направление? Спасибо.