UWP — пользовательская отмена и повтор на InkToolbar в InkCanvas — системе.Исключение ExecutionEngineException не было обработано

#uwp #windows-10-universal #inkcanvas

#uwp #windows-10-universal #inkcanvas

Вопрос:

Попытка создать пользовательскую отмену и повтор на InkCanvas . Однако после некоторого стресс-тестирования (добавить много штрихов, отменить и повторить много раз) приложение вылетает с:

Система.Исключение ExecutionEngineException не было обработано. HResult =-2146233082

в цикле foreach моего AddToRedoList метода. У кого-нибудь есть идеи, как перехватить и исправить исключение?

 private void AddToRedoList(InkStroke addStroke) {
  var addInkPoint = addStroke.GetInkPoints();
  var addInkPointList = new List<InkPoint>();
  foreach (var point in addInkPoint) {
    addInkPointList.Add(new InkPoint(point.Position, point.Pressure));
  }

  redoCustomStrokeList.Add(new CustomStroke() {
    InkPoints = addInkPointList,
    DrawingAttributes = addStroke.DrawingAttributes
  });
}

private void UndoOnClick(object sender, RoutedEventArgs e) {
  var allStrokes = InkImage.InkPresenter.StrokeContainer.GetStrokes();
  var undoStroke = allStrokes[allStrokes.Count - 1];
  AddToRedoList(undoStroke);

  allStrokes[allStrokes.Count - 1].Selected = true;
  InkImage.InkPresenter.StrokeContainer.DeleteSelected();
}

private void RedoOnClick(object sender, RoutedEventArgs e) {
  var lastRedoInkPoints = redoCustomStrokeList[redoCustomStrokeList.Count-1];
  InkImage.InkPresenter.StrokeContainer.AddStroke(CreateStroke(lastRedoInkPoints));
    redoCustomStrokeList.Remove(lastRedoInkPoints);
  }
}
  

Комментарии:

1. Не могли бы вы предоставить весь проект воспроизведения? Приведенный выше код отсутствует и может не воспроизводить вашу проблему на моей стороне.