我正在编写一个UWP文件管理器,我遇到了拖放问题。我可能只是碰到了墙,因为这显然是平台上的另一个错误,但这次我找不到任何解决办法。
当拖动文件并将它们放入文件资源管理器时,一切都很好。我填写DataPackage
并收听OperationCompleted
事件,该事件在文件移动到另一个文件夹时发生。当我将它们放入我的应用程序中的另一个视图时,我可以调用DataPackageView.ReportOperationCompleted
,它可以正常工作(某种程度)。问题是,即使操作尚未完成,它也会在发生丢弃的同时被称为AUTOMATICALLY - 我无法对此做任何事情。当我在事件处理程序中遇到断点时,调用堆栈完全为空。
最重要的是,当我实际查看OperationCompleted
的参数时,Operation
中的OperationCompletedEventArgs
始终为无!当文件资源管理器完成工作时它是无,当它被自动调用时它是无,当我手动调用它时它是无,无论我传递什么参数。对此有任何解释,微软?我已经厌倦了修复你的错误,特别是当我无法实际操作时,因为平台非常有限。
答案 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); };