Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        /// <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));
        }