Есть форма, на ней 3 кнопки: старт, пауза и продолжить, а так же прогрессбар для отображения выполнения задачи.
"Ставлю на паузу" с помощью lock. Вот код:
public class DataForProgress
{
public int Count { get; set; }
public int Value { get; set; }
}
public partial class Form1 : Form
{
private object syncObj = new object();
private static IProgress<DataForProgress> progress;
public Form1()
{
InitializeComponent();
progress = new Progress<DataForProgress>((i) =>
{
progressBar1.Maximum = i.Count;
progressBar1.Value = i.Value;
});
}
public Task LongRunningTask(IProgress<DataForProgress> progress)
{
return Task.Run(() =>
{
int count = 5;
for (int i = 1; i <= count; i++)
{
lock (syncObj) { }
progress.Report(new DataForProgress
{
Value = i,
Count = count
});
Thread.Sleep(2000);
}
});
}
public Task Pause(IProgress<DataForProgress> progress, int val, int count)
{
return Task.Run(() =>
{
lock (syncObj)
{
progress.Report(new DataForProgress
{
Value = val,
Count = count
});
Thread.Sleep(10000);
}
});
}
private async void StartButton_Click(object sender, EventArgs e)
{
label1.Text = "Выполняется...";
await LongRunningTask(progress);
label1.Text = "Завершено";
}
private async void PauseButton_Click(object sender, EventArgs e)
{
label1.Text = "Пауза";
await Pause(progress, progressBar1.Value, progressBar1.Maximum);
}
private void ContinueButton_Click(object sender, EventArgs e)
{
//?
}
}
А как продолжить выполнение задачи?
Да и останавливать поток на n секунд с помощью Thread.Sleep, чтобы сэмулировать паузу, мне кажется не лучшей идеей... но главная задача - это продолжить выполнение таска.