UWP - DataPackage.OperationCompleted是EMPTY&被没人打电话

时间:2017-03-04 15:41:26

标签: c# windows-runtime uwp windows-10 windows-10-universal

我正在编写一个UWP文件管理器,我遇到了拖放问题。我可能只是碰到了墙,因为这显然是平台上的另一个错误,但这次我找不到任何解决办法。

当拖动文件并将它们放入文件资源管理器时,一切都很好。我填写DataPackage并收听OperationCompleted事件,该事件在文件移动到另一个文件夹时发生。当我将它们放入我的应用程序中的另一个视图时,我可以调用DataPackageView.ReportOperationCompleted,它可以正常工作(某种程度)。问题是,即使操作尚未完成,它也会在发生丢弃的同时被称为AUTOMATICALLY - 我无法对此做任何事情。当我在事件处理程序中遇到断点时,调用堆栈完全为空。

最重要的是,当我实际查看OperationCompleted的参数时,Operation中的OperationCompletedEventArgs始终为无!当文件资源管理器完成工作时它是无,当它被自动调用时它是无,当我手动调用它时它是无,无论我传递什么参数。对此有任何解释,微软?我已经厌倦了修复你的错误,特别是当我无法实际操作时,因为平台非常有限。

1 个答案:

答案 0 :(得分:0)

  在UWP中拖放文件的另一个“好奇心”是,如果您的应用程序中删除了文件并且请求的操作设置为移动 - 您实际上无法移动它们 - 文件是只读的。尝试向用户解释。

不确定如何移动文件。通常,您应该使用StorageFile.CopyAsync方法。您可以使用try/catch块来包装此操作,如下所示:

try
{
     var operation = appFile.File.CopyAsync(ApplicationData.Current.LocalFolder, appFile.File.DisplayName, NameCollisionOption.GenerateUniqueName);

}
catch (Exception ex)
{
     System.Diagnostics.Debug.WriteLine("exception msg: "+ex.Message);
}

然后,如果文件是只读的,您将收到异常消息,您应该使用此消息通知用户。

  

我想要了解操作实际完成的时间。

您应该为异步操作实现AsyncOperationWithProgressCompletedHandler,然后在完成后会收到通知。

operation.Completed = (tresult,tprogress) => { System.Diagnostics.Debug.WriteLine("progress msg: "+tprogress); };