/// <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)); }
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); }