Есть Task, который запускается при нажатие кнопки. В нем не используются бесконечные циклы.
Task.Factory.StartNew(() => data.StartForFind(cancellationTokenSource.Token, textBoxStatus, treeViewResult), TaskCreationOptions.LongRunning);
Мне необходимо чтобы, при нажатии другой кнопки, задача останавливалась, а затем, при повторном нажатии, продолжала работать с того места, где она остановилась.
Как можно это реализовать?
Если управлять нужно неким циклом, то можно так
private ManualResetEvent _manualEvent = new ManualResetEvent(true);
private void Run()
{
Task.Run(() =>
{
while(условие остановки)
{
_manualEvent.WaitOne();
// операции
}
});
}
private void Resume()
{
_manualEvent.Set();
}
private void Pause()
{
_manualEvent.Reset();
}
Останавливать поток надолго, хоть с помощью while, хоть с помощью ResetEvent - довольно расточительно: поток (ресурс операционной системы) занят, но не делает полезной работы.
Правильней было бы запоминать текущее состояние выполненной работы при включении паузы и завершать задачу (Task). А при продолжении восстанавливать состояние: стартовать новую задачу.
У вас осуществляется поиск файла. При включении паузы запоминаем номер (индекс) файла (или его имя). При продолжении начинаем просмотр коллекции файлов с него.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости