连续操作 inkstrorkecontainer.clear() 和 addlines() 导致 UWP 中出现异常

标签 c uwp uwp-xaml

Sink1是一个inklines容器,它没有绑定(bind)到inkcanvas(我也尝试将它绑定(bind)到inkcanvas以避免异常,但仍然没用)。 ink1 是 xaml 上的 inkcanvas。

 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 中运行它们,也是炸弹。 我这样做是因为我需要使用 inkrinklecontainer 类中的 save 方法序列化 isf 格式的 inklines,使用其他方法序列化结果大小太大。

最佳答案

the Sink1 is a inkstrokecontainer, it does not binding to an inkcanvas

这就是问题的原因。

sink1ink1.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,你可以添加它。

致以诚挚的问候。

关于连续操作 inkstrorkecontainer.clear() 和 addlines() 导致 UWP 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58679922/

相关文章:

c - 在 Linux shell 中实现流水线

c - 在 C 中的函数内部声明函数

c# - UWP 应用程序中的 DockPanel?

工具箱中缺少 UWP Treeview

uwp - 是否可以更改 NavigationView 的设置项的图标和文本?

c - 在 C 中以原子方式比较两个整数的最快方法?

c - 是否可以迭代可变参数宏中的参数?

c# - UWP 图像未更新/重新加载

c# - 更改 GridView 项目大小

c# - 获取 Window.Current.Content 的参数