2017-03-04 316 views
0

我正在寫一個UWP文件管理器,並且遇到拖動&丟失的問題。我可能只是靠着牆壁敲打我的頭,因爲這顯然是平臺中的另一個錯誤,但是這次我找不到任何解決方法。UWP - DataPackage.OperationCompleted是EMPTY&被任何人調用

當拖動文件並將其放入文件資源管理器時,一切都很好。我填入DataPackage並收聽OperationCompleted事件,當文件完成移動到另一個文件夾時發生。當我把它們放到我的應用程序中的另一個視圖中時,我可以調用DataPackageView.ReportOperationCompleted,它可以工作(有點)。問題是,即使操作還沒有完成,它也被稱爲AUTOMATICALLY,同時發生丟棄 - 我無法做任何事情。當我在事件處理程序中遇到斷點時,調用堆棧是完全空的。

最重要的是,當我真正查看OperationCompleted的參數時,OperationOperationCompletedEventArgs總是無!當文件資源管理器完成這項工作時它是None,當它被自動調用時它是None,當我手動調用它時是None,不關心我傳入的參數。對此的任何解釋,Microsoft?我厭倦了修復你的錯誤,特別是當我無法真正做到這一點時,因爲平臺非常有限。

+0

如果您只是想在UWP中拖放文件。看起來你不需要調用'DataPackageView.ReportOperationCompleted'事件,參見[http://jamescroft.co.uk/blog/uwp/implementing-file-drag-drop-in-your-windows-10-uwp -application /](http://jamescroft.co.uk/blog/uwp/implementing-file-drag-drop-in-your-windows-10-uwp-application/) – Skyblue

+0

不,我不知道,你是正確的,這已經有效,但我想要一個通知,當操作實際完成。即使我實際上並不需要它,這肯定應該起作用,因爲其他程序可以依賴於此。 – Neme

+0

順便說一下,在UWP中拖放文件的另一個「好奇心」是,如果您的應用程序中丟失了文件,並且請求的操作設置爲移動 - 您實際上無法移動它們 - 文件是隻讀的。嘗試向用戶解釋。 – Neme

回答

0

一個其他的「好奇心」與阻力&在UWP文件拖放的是,如果你的文件下降在您的應用程序和請求的操作設置爲移動 - 你不能真正移動它們 - 這些文件是隻讀。嘗試向用戶解釋。

不知道如何移動文件。一般來說,你應該使用StorageFile.CopyAsync方法。你可以使用try/catch塊包像follwing此操作:

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); }; 
+0

是的,CopyAsync工作,但MoveAsync引發異常。這些文件是隻讀的 - 即使用戶將它們放入我的應用程序,我也無法訪問它們。我收到請求的移動操作 - 並且無法移動它們。 – Neme

+0

我很感激幫助,但那不是我的意思。當然,我知道我什麼時候完成了。那不是重點。任何應用程序都可以將文件放入我的應用程序,而不僅僅是我自己的。您必須將其報告給源應用程序 - 這就是API的要點。 – Neme