Я пытаюсь реализовать механизм перетаскивания в моем приложении 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();
});
}
В результате, когдапользователь начинает перетаскивать элемент из моего приложения в другое приложение, рядом с курсором мыши у него будет .Кроме того, что гораздо хуже, если пользователь отпустит кнопку мыши (при ее перетаскивании) до того, как я получу данные для отсрочки перетаскивания, , тогда ничего не произойдет (как если бы операция молча провалилась).
Я уже думал о том, чтобы дать пользователю индикацию в моем собственном приложении, когда данные будут готовы, чтобы они могли отпустить кнопку мыши.Но есть ли лучший способ предотвратить любую из этих двух проблем?