Retrieve JIRA issue summary async to not block UI

This commit is contained in:
Gregoire Pailler 2014-11-12 14:49:36 +08:00
parent 53bbeece19
commit 31d4a11795

View file

@ -31,6 +31,8 @@
namespace UploadersLib.GUI namespace UploadersLib.GUI
{ {
using System.Threading.Tasks;
public partial class JiraUpload : Form public partial class JiraUpload : Form
{ {
public delegate string GetSummaryHandler(string issueId); public delegate string GetSummaryHandler(string issueId);
@ -64,10 +66,10 @@ public JiraUpload(string issuePrefix, GetSummaryHandler getSummary)
private void JiraUpload_Load(object sender, EventArgs e) private void JiraUpload_Load(object sender, EventArgs e)
{ {
UpdateSummary(null);
txtIssueId.Text = _issuePrefix; txtIssueId.Text = _issuePrefix;
txtIssueId.SelectionStart = txtIssueId.Text.Length; txtIssueId.SelectionStart = txtIssueId.Text.Length;
ValidateIssueId(txtIssueId.Text);
} }
private void textBox1_TextChanged(object sender, EventArgs e) private void textBox1_TextChanged(object sender, EventArgs e)
@ -83,11 +85,22 @@ private void btnSend_Click(object sender, EventArgs e)
private void ValidateIssueId(string issueId) private void ValidateIssueId(string issueId)
{ {
var res = _getSummary(issueId); Task.Factory
btnUpload.Enabled = (res != null); .StartNew(() => _getSummary(issueId))
.ContinueWith(UpdateSummaryAsync);
}
lblSummary.Text = res ?? Resources.JiraUpload_ValidateIssueId_Issue_not_found; private void UpdateSummaryAsync(Task<string> task)
lblSummary.Enabled = res != null; {
this.Invoke((Action)(() => UpdateSummary(task.Result)));
}
private void UpdateSummary(string summary)
{
btnUpload.Enabled = (summary != null);
lblSummary.Text = summary ?? Resources.JiraUpload_ValidateIssueId_Issue_not_found;
lblSummary.Enabled = summary != null;
} }
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e)