Возникла исключительная ситуация System.IndexOutOfRangeException в PresentationFramework.dll - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть проект, который работал нормально, когда целевой .NetFramework был 3.5, но когда я изменил его на 4.6.2, я получил исключение всякий раз, когда код выполняет функцию REMOVE Коллекции.

Что я заметил когда я пытался отладить этот код до того, как был выполнен «Call.Remove ((CallVM) отправитель)», он показал, что у меня есть 2 записи в коллекции, но как только он выполняется, он говорит, что осталась 1 запись, но на самом деле в пользовательский интерфейс, он по-прежнему показывает НЕКОТОРОЙ информации из 2-й записи коллекции. Вторая запись была частично удалена. Моя цель состояла в том, чтобы удалить всю информацию о второй записи в коллекции.

Код, где происходит исключение:

void call_CancelCall(object sender, EventArgs e)
    {
        if (string.IsNullOrEmpty(this.SelectedCall.ID) == false)
        {
            CTIHelper.Instance.ReleaseCall(this.SelectedCall.ID);
        }
        calls.Remove((CallVM)sender);   
        IsConsultChecked = false;
        IsMakeCallChecked = false;

        var activeCalls = (from c in this.calls
                           where c.IsConnected == true && c.IsReleased == false
                           select c).FirstOrDefault();
        if (activeCalls != null)
        {
            IsConsultEnabled = true;
            activeCalls.IsHoldEnabled = true;
        }
        OnNotifyPropertyChanged("Calls");
        OnNotifyPropertyChanged("IsWorkspaceVisible");
    }

А вот подробности исключения:

System.IndexOutOfRangeException was unhandled by user code
  HResult=-2146233080
  Message=Index was outside the bounds of the array.
  Source=PresentationFramework
  StackTrace:
       at System.Windows.Controls.ItemContainerGenerator.RealizedItemBlock.ContainerAt(Int32 index)
       at System.Windows.Controls.ItemContainerGenerator.ContainerFromIndex(Int32 index)
       at System.Windows.Controls.TabControl.GetSelectedTabItem()
       at System.Windows.Controls.TabControl.OnSelectionChanged(SelectionChangedEventArgs e)
       at System.Windows.Controls.Primitives.Selector.InvokeSelectionChanged(List`1 unselectedInfos, List`1 selectedInfos)
       at System.Windows.Controls.Primitives.Selector.SelectionChanger.End()
       at System.Windows.Controls.Primitives.Selector.RemoveFromSelection(NotifyCollectionChangedEventArgs e)
       at System.Windows.Controls.Primitives.Selector.OnItemsChanged(NotifyCollectionChangedEventArgs e)
       at System.Windows.Controls.TabControl.OnItemsChanged(NotifyCollectionChangedEventArgs e)
       at System.Windows.Controls.ItemsControl.OnItemCollectionChanged2(Object sender, NotifyCollectionChangedEventArgs e)
       at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
       at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
       at System.Windows.Controls.ItemCollection.OnViewCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
       at System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
       at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
       at System.Collections.Specialized.CollectionChangedEventManager.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
       at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
       at System.Windows.Data.ListCollectionView.ProcessCollectionChangedWithAdjustedIndex(NotifyCollectionChangedEventArgs args, Int32 adjustedOldIndex, Int32 adjustedNewIndex)
       at System.Windows.Data.ListCollectionView.ProcessCollectionChanged(NotifyCollectionChangedEventArgs args)
       at System.Windows.Data.CollectionView.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
       at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
       at System.Collections.ObjectModel.ObservableCollection`1.RemoveItem(Int32 index)
       at System.Collections.ObjectModel.Collection`1.Remove(T item)
       at YYY.CTI.ViewModel.winCTIBaseViewModel.call_CancelCall(Object sender, EventArgs e) in C:\Users\XXX\Desktop\ZZZ\web\ctidesktop\CTI Desktop\View Models\winCTIBaseViewModel.cs:line 4340
       at YYY.CTI.ViewModel.CallVM.OnCancel(EventArgs e) in C:\Users\XXX\Desktop\ZZZ\web\ctidesktop\CTI Desktop\View Models\CallVM.cs:line 4263
       at YYY.CTI.ViewModel.CallVM.Cancel() in C:\Users\XXX\Desktop\ZZZ\web\ctidesktop\CTI Desktop\View Models\CallVM.cs:line 2446
       at YYY.CTI.View.Controls.CallControl.btnCancelNewCall_Click(Object sender, RoutedEventArgs e) in C:\Users\XXX\Desktop\ZZZ\web\ctidesktop\CTI Desktop\Controls\CallControl.xaml.cs:line 159
       at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
       at System.Windows.Controls.Primitives.ButtonBase.OnClick()
       at System.Windows.Controls.Primitives.ToggleButton.OnClick()
       at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
       at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
       at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
       at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
       at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
       at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
       at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
       at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
       at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
       at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
       at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
       at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
       at System.Windows.Input.InputManager.ProcessStagingArea()
       at System.Windows.Input.InputManager.ProcessInput(InputEventArgs input)
       at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
       at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
       at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
       at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
       at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
       at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
  InnerException: 

Любая помощь высоко ценится. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...