【问题标题】:drag and drop - lag in UWP拖放 - UWP 中的滞后
【发布时间】:2020-05-25 10:52:47
【问题描述】:

你好拖放粉丝,

谁能解释为什么我在 UWP 应用中使用拖放时会看到很长的延迟时间?

我编写了一个测试应用程序,其中仅包含拖放消息处理程序以及用于比较的指针处理程序。这是代码...

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        grid1.AllowDrop = true;
        grid1.DragOver += Grid1_DragOver;
        grid1.Drop += Grid1_Drop;
        grid1.DragLeave += Grid1_DragLeave;

        grid1.PointerEntered += Grid1_PointerEntered;
        grid1.PointerExited += Grid1_PointerExited;

    }

    //  Drag Handlers ************************
    private void Grid1_DragOver(object sender, DragEventArgs e)
    {
        msgFromPointer.Text = "  drag/drop item has entered";

        e.AcceptedOperation = Windows.ApplicationModel.DataTransfer.DataPackageOperation.Copy;
        Debug.WriteLine("in grid1 drag over handler");
    }

    private void Grid1_DragLeave(object sender, DragEventArgs e)
    {
        msgFromPointer.Text = "";
    }

    private void Grid1_Drop(object sender, DragEventArgs e)
    {
        Debug.WriteLine("in grid1 drop handler");
    }


    // pointer handlers *******************
    private void Grid1_PointerEntered(object sender, PointerRoutedEventArgs e)
    {

        msgFromPointer.Text = "POINTER has entered";
    }

    private void Grid1_PointerExited(object sender, PointerRoutedEventArgs e)
    {
        msgFromPointer.Text = "";
    }

当对我的应用进行拖放时,在我的应用收到 dragOver 消息之前似乎有大约 1/2 秒的延迟。相比之下,pointerOver 消息似乎几乎与指针移动同时到达。使用触摸屏或鼠标时,缓慢的行为是相同的。这是该行为的视频……

video of the laggy behavior

我使用的 PC 有一个触摸屏,我想知道是否有某种触摸“驱动程序”或过滤器会减慢拖放消息的速度。我尝试了一堆 Windows 配置设置,例如鼠标和显示设置,但没有任何变化。 PC 是 Dell Inspiron 3593,带有最新的驱动程序。我的 Windows 10 版本是 1903,build 18362.836

我正在开发的应用程序使用了大量的拖放操作,这种缓慢的行为使用户界面非常困难。这有点像尝试以 1/2 秒的延迟进行电话交谈。

有什么想法吗?

【问题讨论】:

  • 似乎将缩略图加载到 DragUI 所需的延迟,请使用更可缓存的文件缩略图重试,例如 .txt 文件之一,也测试会发生什么当您拖动多个文件时。
  • 我尝试删除一个 .txt 文件和多个文件,但延迟相同。在我正在开发的应用程序中,我完全关闭了缩略图的绘制,但仍然有同样的延迟。
  • 可能是因为你使用了调试版本,调试版本要慢得多并且使用两倍的内存,切换到发布并检查它的运行情况。
  • 我会在今天晚些时候尝试。谢谢!
  • 好的,我做了一个发布版本,但没有改变。我确实发现了另一件事。在我正在开发的应用程序(而不是测试应用程序)中,当我删除文件时,应用程序会显示图像。我发现我可以在缩略图、字形和文本显示之前 放置一个文件。在相同的延迟之后,图像会显示出来。这让我觉得所有的消息都被延迟了——dragOver 消息和 drop 消息。然后,1/2 秒后,所有消息都被传递,应用程序执行它应该做的事情。

标签: windows uwp drag-and-drop lag


【解决方案1】:

DragOver 事件在应用程序确定当前指针下的元素是潜在的放置目标时触发。

这需要指针悬停一段时间。这可能是您认为延迟的原因。

你可以试试DragEnter事件,该事件早于DragOver触发。

谢谢

【讨论】:

  • 这很有趣!我之前在我的主应用程序中尝试过 DragEnter,它没有减少缩略图/字形/文本出现之前的延迟,所以我并不乐观。但是,我在我的测试应用程序中实现它只是为了重新测试并将“DRAG ENTER 消息”添加到我显示的文本字符串中。果然,“DRAG ENTER message”立即出现了,但是缩略图/字形/文本仍然需要1/2秒才能出现。这是否意味着我必须忍受 UWP 的延迟?我以前的应用程序(非 UWP 应用程序)没有此延迟。
  • 您好,这部分延迟是重建图片缩略图的过程,暂时不能跳过。
  • 好的。这回答了我的问题。谢谢@理查德!作为后记,我试图通过在 dragOver 消息到达时更改不透明度来给用户一些早期的反馈。但是,在显示缩略图/字形/标题之前,不会出现新的不透明度。然后我通过使用 e.DragUIOverride 元素停止了缩略图/字形/标题的显示,但没有运气。即使没有显示任何缩略图/字形/标题,不透明度更改仍会延迟。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 2019-06-24
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多