public Action DownloadIssues(string project, int start, bool includeClosedIssues, Func<IEnumerable<Issue>, bool> onData, Action<DownloadProgressChangedEventArgs> onProgress, Action<bool, Exception> onCompleted) { Debug.Assert(project != null); Debug.Assert(onData != null); var client = new Gurtle.WebClient(); client.DownloadStringAsync(this.IssuesUrl()); client.DownloadStringCompleted += (sender, args) => { if (args.Cancelled || args.Error != null) { if (onCompleted != null) onCompleted(args.Cancelled, args.Error); return; } var issues = IssueTableParser.Parse(args.Result).ToArray(); onData(issues); if (onCompleted != null) onCompleted(false, null); }; if (onProgress != null) client.DownloadProgressChanged += (sender, args) => onProgress(args); return client.CancelAsync; }