private async Task <PPError> RenameAsyncCore(FileRef newFileRef, MessageLoop messageLoop = null) { var tcs = new TaskCompletionSource <PPError>(); EventHandler <PPError> handler = (s, e) => { tcs.TrySetResult(e); }; try { HandleRename += handler; if (MessageLoop == null && messageLoop == null) { Rename(newFileRef); } else { Action <PPError> action = new Action <PPError>((e) => { var result = (PPError)PPBFileRef.Rename(this, newFileRef, new BlockUntilComplete() ); tcs.TrySetResult(result); } ); InvokeHelper(action, messageLoop); } return(await tcs.Task); } catch (Exception exc) { Console.WriteLine(exc.Message); tcs.SetException(exc); return(PPError.Aborted); } finally { HandleRename -= handler; } }
/// <summary> /// Rename() renames a file or directory. Argument <code>newFileRef</code> /// must refer to files in the same file system as in this object. It is an /// error to rename a file or directory that is in use. It is not valid to /// rename a file in the external file system. /// </summary> /// <param name="newFileRef">A <code>FileRef</code> corresponding to a new /// file reference.</param> /// <returns>Error code</returns> PPError Rename(FileRef newFileRef) => (PPError)PPBFileRef.Rename(this, newFileRef, new CompletionCallback(OnRename));