예제 #1
0
        /// <summary>
        /// Extends BeginInvoke so that when a state object is not needed, null does not need to be passed.
        /// <example>
        /// writestreamclosedeventhandler.BeginInvoke(sender, e, callback);
        /// </example>
        /// </summary>
        public static IAsyncResult BeginInvoke(this WriteStreamClosedEventHandler writestreamclosedeventhandler, Object sender, WriteStreamClosedEventArgs e, AsyncCallback callback)
        {
            if (writestreamclosedeventhandler == null)
            {
                throw new ArgumentNullException("writestreamclosedeventhandler");
            }

            return(writestreamclosedeventhandler.BeginInvoke(sender, e, callback, null));
        }
예제 #2
0
        protected virtual void OnWriteStreamClosed(WriteStreamClosedEventArgs e)
        {
            CompleteAsync();
            WriteStreamClosedEventHandler handler = WriteStreamClosed;

            if (handler != null)
            {
                handler(this, e);
            }
        }
        public static Task UploadDataAsync(this WebClient client, string address, string method, byte[] data)
        {
            var source = new TaskCompletionSource <bool>();

            client.AllowWriteStreamBuffering = true;
            OpenWriteCompletedEventHandler openWriteCompletedHandler = (s, args) =>
            {
                using (var stream = new MemoryStream(data))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        using (BinaryWriter bw = new BinaryWriter(args.Result))
                        {
                            long   bCount   = 0;
                            long   fileSize = stream.Length;
                            byte[] bytes    = new byte[BLOCK_SIZE];
                            do
                            {
                                bytes   = br.ReadBytes(BLOCK_SIZE);
                                bCount += bytes.Length;
                                bw.Write(bytes);
                            } while (bCount < fileSize);
                        }
                    }
                }
            };

            WriteStreamClosedEventHandler streamClosedHandler = null;

            streamClosedHandler = (s, args) =>
            {
                if (args.Error != null)
                {
                    source.TrySetException(args.Error);
                }
                else
                {
                    source.TrySetResult(true);
                }

                // Unsubscribe the handlers
                client.OpenWriteCompleted -= openWriteCompletedHandler;
                client.WriteStreamClosed  -= streamClosedHandler;
            };

            client.OpenWriteCompleted += openWriteCompletedHandler;
            client.WriteStreamClosed  += streamClosedHandler;
            client.OpenWriteAsync(new Uri(address), method);
            return(source.Task);
        }