C# UWP-DataPackage.OperationCompleted为空&;没人打电话

C# UWP-DataPackage.OperationCompleted为空&;没人打电话,c#,windows-runtime,uwp,windows-10,windows-10-universal,C#,Windows Runtime,Uwp,Windows 10,Windows 10 Universal,我正在编写一个UWP文件管理器,我遇到了一个拖放问题。我可能只是在碰壁,因为这显然是平台中的另一个bug,但这次我找不到任何解决方法 拖动文件并将其放入文件资源管理器时,一切正常。我填充数据包,并收听操作完成事件,该事件发生在文件完成移动到另一个文件夹时。当我把它们放到我的应用程序中的另一个视图中时,我可以调用DataPackageView.ReportOperationCompleted,它确实起作用(某种程度上)。问题是,即使操作还没有完成,它也会在下降发生的同时自动调用,我对此无能为力。当

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

拖动文件并将其放入文件资源管理器时,一切正常。我填充
数据包
,并收听
操作完成
事件,该事件发生在文件完成移动到另一个文件夹时。当我把它们放到我的应用程序中的另一个视图中时,我可以调用
DataPackageView.ReportOperationCompleted
,它确实起作用(某种程度上)。问题是,即使操作还没有完成,它也会在下降发生的同时自动调用,我对此无能为力。当我在事件处理程序中遇到断点时,调用堆栈完全为空

最重要的是,当我实际查看
OperationCompleted
的参数时,
OperationCompletedEventArgs
中的
操作
总是没有!当文件资源管理器执行任务时,它是无的;当它被自动调用时,它是无的;当我手动调用它时,它是无的,无论我传入什么参数。有什么解释吗,微软?我已经厌倦了修复你的bug,尤其是当我无法真正做到的时候,因为平台太有限了

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

不确定如何移动文件。通常,您应该使用
StorageFile.copyanc
方法。您可以使用
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); };

如果您只想在UWP中拖放文件。似乎您不需要调用
DataPackageView.ReportOperationCompleted
事件,请参见否我不知道,您是对的,这已经起作用了,但我希望在操作实际完成时收到通知。即使我实际上不需要它,这也是其他程序可以依赖的东西。顺便说一下,UWP中拖放文件的另一个“好奇”是,如果你在应用程序中拖放文件,并且请求的操作设置为移动-你实际上无法移动-文件是只读的。尝试向用户解释这一点。是的,CopySync可以工作,但MoveAsync会引发异常。这些文件是只读的-即使用户将它们放入我的应用程序中,我也无法访问它们。我收到了移动手术的请求,但是没有办法移动他们。我感谢你的帮助,但这不是我的意思。我当然知道我所做的什么时候结束。这不是重点。任何应用程序都可以将文件放入我的应用程序,而不仅仅是我自己的应用程序。你必须向源应用程序报告-这就是API的要点。