private void button2_Click(object sender, EventArgs e) { Service service = new Service(); int expectedDuration = 10; ToOutput("[Started] Worker with progress ({0} seconds)", expectedDuration); m_cts = new CancellationTokenSource(); button2.Enabled = false; Task.Factory.StartNew(() => service.DoWithProgress(expectedDuration, progress => { Invoke((Action) delegate { ToOutput("[Progress] Worker with progress ({0})", progress); }); }, m_cts.Token), m_cts.Token) .ContinueWith(data => { if (m_cts.IsCancellationRequested) ToOutput("[Cancelled] Worker with progress"); ToOutput("[Completed] Worker with progress"); m_cts.Dispose(); m_cts = null; button2.Enabled = true; }, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()); }
private void button1_Click(object sender, EventArgs e) { Service service = new Service(); int expectedDuration = 5; ToOutput("[Started] Worker ({0} seconds)", expectedDuration); button1.Enabled = false; Task.Factory.StartNew(() => service.Do(expectedDuration)) .ContinueWith(data => { ToOutput("[Completed] Worker"); button1.Enabled = true; }, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()); }
private void button6_Click(object sender, EventArgs e) { Service service = new Service(); int expectedDuration = 15; ToOutput("[Started] Worker without any progress/events ({0} seconds)", expectedDuration); button6.Enabled = false; m_cts = new CancellationTokenSource(); Task workingTask = Task.Factory.StartNew(() => service.DoWithoutProgress(expectedDuration)); Task progressTask = Task.Factory.StartNew(() => service.DoLoopedProgress( procent => { Invoke((Action) delegate { ToOutput("[Progress] Working process ({0}%)", procent); }); }, workingTask, m_cts.Token )).ContinueWith(data => { m_cts.Dispose(); m_cts = null; button6.Enabled = true; }, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()); }