private void button1_Click(object sender, EventArgs e) { progressBarSample = new ProgressBarSample(); progressBarSample.ProgressChanged += OnProgressChanged; button1.Enabled = false; // Dowork method executed in new thread, but work completed will start in main thread (ui-thread) System.Threading.Tasks.Task.Factory .StartNew(() => progressBarSample.DoWork()) .ContinueWith((t, o) => WorkCompleted(t.Result), null, taskScheduler); }
private async void button1_Click(object sender, EventArgs e) { button1.Enabled = false; progressBarSample = new ProgressBarSample(); progressBarSample.ProgressChanged += OnProgressChanged; //progressBarSample.WorkCompleted += OnWorkCompleted; var cancelled = await Task <bool> .Factory.StartNew(() => progressBarSample.DoWork()); string message = cancelled ? "Work was cancelled" : "Work was done"; MessageBox.Show(message); button1.Enabled = true; }