private async Task <DirectoryEntries> ReadDirectoryEntriesAsyncCore(MessageLoop messageLoop = null) { var tcs = new TaskCompletionSource <DirectoryEntries>(); EventHandler <DirectoryEntries> handler = (s, e) => { tcs.TrySetResult(e); }; try { HandleReadDirectoryEntries += handler; if (MessageLoop == null && messageLoop == null) { ReadDirectoryEntries(); } else { Action <PPError> action = new Action <PPError>((e) => { var output = new ArrayOutputAdapterWithStorage <PPDirectoryEntry[]>(); var result = (PPError)PPBFileRef.ReadDirectoryEntries(this, output.PPArrayOutput, new BlockUntilComplete() ); var entries = new List <DirectoryEntry>(); foreach (var entry in output.Output) { entries.Add(new DirectoryEntry(entry)); } tcs.TrySetResult(new DirectoryEntries(result, entries.AsReadOnly())); } ); InvokeHelper(action, messageLoop); } return(await tcs.Task); } catch (Exception exc) { Console.WriteLine(exc.Message); tcs.SetException(exc); return(new DirectoryEntries(PPError.Aborted, new List <DirectoryEntry> ().AsReadOnly())); } finally { HandleReadDirectoryEntries -= handler; } }
/// <summary> /// ReadDirectoryEntries() Reads all entries in the directory. /// </summary> /// <returns>Error code.</returns> PPError ReadDirectoryEntries() { var listCallback = new CompletionCallbackWithOutput <PPDirectoryEntry[], PPResource>(ListCallback, this); return((PPError)PPBFileRef.ReadDirectoryEntries(this, listCallback, listCallback)); }