【发布时间】:2019-06-24 18:05:24
【问题描述】:
我正在尝试在我的 UWP 应用中实现拖放机制,以便可以轻松地将我的应用中的项目复制到其他应用中。
问题是,在拖动操作开始的那一刻,我并不总是拥有应该复制的数据。相反,我等待异步操作完成,然后才更新延迟的数据。
这就是我一直在使用的代码,基本上:
private void myGrid_DragStarting(UIElement sender, DragStartingEventArgs args)
{
var deferral = args.GetDeferral();
args.Data.RequestedOperation = DataPackageOperation.Copy;
someAsyncFunction(async (data) => // this callback might take a few seconds to be invoked
{
//
// ... some code which also invokes another function with "await"
//
args.Data.SetStorageItems(new[] { data });
deferral.Complete();
});
}
因此,当用户开始将项目从我的应用拖到另一个应用时,它会有一个 ????在鼠标光标旁边签名。此外,比这更糟糕的是,如果用户在我获得延迟拖动的数据之前释放鼠标按钮(同时拖动它),那么什么都不会发生(好像操作静默失败)。
我已经考虑过在我自己的应用程序上向用户提供一些指示,即数据何时准备就绪,以便他们可以释放鼠标按钮。但是有没有更好的方法来防止这两个问题中的任何一个?
【问题讨论】:
标签: c# windows asynchronous winapi uwp