непрерывная работа: inkstrorkecontainer.clear () и addstrokes () требуют исключения в UWP - PullRequest
0 голосов
/ 03 ноября 2019

Sink1 - контейнер для рукописного ввода, он не привязывается к чернильному холсту (я также пытался связать его с чернильным холстом, чтобы избежать ИСКЛЮЧЕНИЯ, но все еще бесполезно). ink1 - это чернила для xaml.

 public sealed partial class wpage : Page


         {
            public wpage()
            {
                this.InitializeComponent();

                ink1.InkPresenter.StrokeContainer = inkStrokeContainer1;
                ink1.InkPresenter.StrokesCollected += InkPresenter_StrokesCollected;
                ink1.InkPresenter.InputDeviceTypes = CoreInputDeviceTypes.Pen | CoreInputDeviceTypes.Mouse;
             }

                public  void InkPresenter_StrokesCollected(InkPresenter sender, InkStrokesCollectedEventArgs args)

            {sink1.Clear();
             sink1.AddStrokes(args.Strokes);
            }


    }

above code will cause an


    #if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
                UnhandledException += (sender, e) =>
                {
                    if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();

Я также пробовал:

public async void InkPresenter_StrokesCollected(InkPresenter sender, InkStrokesCollectedEventArgs args)

   {     await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Low, new DispatchedHandler(() =>
         {    {sink1.Clear();
             sink1.AddStrokes(args.Strokes);
            });

     }

, но все еще бесполезно и бомба с

 #if DEBUG && !DISABLE_XAML_GENERATED_BREAK_ON_UNHANDLED_EXCEPTION
            UnhandledException += (sender, e) =>
            {
                if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break(); .

Я также пыталсязапустить их как в taks.run, так и в Dispatcher.RunAsync, также бомба. Я делаю это, потому что мне нужно сериализовать чернильный удар в формате isf с помощью метода save в классе inkstrokecontainer, сериализовать с другим методом, размер результата слишком велик.

1 Ответ

0 голосов
/ 04 ноября 2019

Sink1 - контейнер для рукописного ввода, он не привязан к чернильному холсту

Это является причиной проблемы.

sink1 и ink1.InkPresenter.StrokeContainer являютсяне то же самое InkStrokeContainer, что означает, что Stroke в InkCanvas нельзя напрямую добавить к другому StrokeContainer.

Вы можете попытаться изменить свой код:

private void InkPresenter_Collect(InkPresenter sender, InkStrokesCollectedEventArgs args)
{
    sink1.Clear();
    foreach (var item in args.Strokes)
    {
        sink1.AddStroke(item.Clone());
    }
}

Проще говоря, Stroke, уже отображенный на экране, принадлежит ink1, вы не можете добавить его к другому InkStrokeContainer, но вы можете получить его клонированный объект, клонированный объект не принадлежит ink1,Вы можете добавить его.

С уважением.

...