【发布时间】: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 消息似乎几乎与指针移动同时到达。使用触摸屏或鼠标时,缓慢的行为是相同的。这是该行为的视频……
我使用的 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