Есть 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). А при продолжении восстанавливать состояние: стартовать новую задачу.
У вас осуществляется поиск файла. При включении паузы запоминаем номер (индекс) файла (или его имя). При продолжении начинаем просмотр коллекции файлов с него.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
у меня есть толстое приложение на сканере, которое должно сканировать штрихкод с PDF - файлаШтрихкод включает в себя 3 значения [Текстовое значение][пробел][Текстовое...
Основная проблема найти пример того, как в ComboBox Items вставлять ряд данных из базы Firebase, к примеру при нажатии кнопки
GridView состоит с GridViewRowPresenter'ов и если GridViewColumn задан DataTemplate для ячеек, то внутри GridViewRowPresenter'а будут не TextBlock а ContentPresenter с тем что мы зададим в DataTemplate...
У меня есть глобальный массив и 2 события eventНа момент запуска программы события вызываются параллельно