Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 293

Task не запускается повторно

10.08.2019, 17:49. Показов 3573. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Подскажите, пожалуйста, с решением задачки.
В Task у меня выполняется длительный метод. Если я его завершаю во время выполнения, то повторно метод не запускается. Только после перезапуска программы.

Кнопка старт
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CancellationTokenSource cancelTokenSource;
CancellationToken token;
        private void button2_Click(object sender, EventArgs e)
        {
            cancelTokenSource = new CancellationTokenSource();
            token = cancelTokenSource.Token;
          
            string str = richTextBox1.Text;
            int number = comboBox1.SelectedIndex+1;            
 
            Task.Run(() => 
            {
                MX.PlayWithNotes(number, str, token);
            }, token);
        }
Кнопка стоп
C#
1
2
3
4
 private void button3_Click(object sender, EventArgs e)
        {
            cancelTokenSource.Cancel();
        }
Прерывание потока в методе, который надо завершить
C#
1
2
3
4
if (token.IsCancellationRequested)  //прерывание потока task
                {
                    return;
                }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2019, 17:49
Ответы с готовыми решениями:

Task.WhenAll для разных типов Task
Здравствуйте! Есть код вида SomeType a = await SomeTask; OtherType b = await OtherTask; //other code Как можно эти два await'a...

Отмена одного Task в массиве Task
Как можно отменить одну задачу в массиве Task? Никак же нельзя передать CancellationTokenSource в массиве?

Не запускается повторно slideDown()
Привет! Пишу лендинг. После первого экрана расположен блок с меню. Когда прокручиваю страницу и блок с меню доходит до верха,...

11
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.08.2019, 18:05
Скорее всего при повторном вызове логика в MX.PlayWithNotes падает с исключением.
Сделайте обработчик кнопки с async-ом и оберните таску в try/catch с await-ом.
0
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 293
10.08.2019, 18:21  [ТС]
Скорее всего при повторном вызове логика в MX.PlayWithNotes падает с исключением.
Вообще ничего не происходит (ошибок нет, нажимаю как на пустую кнопку). Если убрать task и сразу вызывать метод, то после завершения можно еще раз его запустить и все работает.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.08.2019, 18:26
Цитата Сообщение от WersaT Посмотреть сообщение
Вообще ничего не происходит
Вы добавили try/catch в метод? Запустите под отладкой, либо в блоке catch выводите ошибку, например, через MessageBox.Show.
0
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 293
10.08.2019, 18:35  [ТС]
добавил try/cath, стало вот так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private async void button2_Click(object sender, EventArgs e)
        {
            try
            {
                cancelTokenSource = new CancellationTokenSource();
                token = cancelTokenSource.Token;
                string str = richTextBox1.Text;
                int number = comboBox1.SelectedIndex + 1;
                await Task.Run(() =>
                {
                    MX.PlayWithNotes(number, str, token);
                }, token);
            }
            catch(Exception e1) { MessageBox.Show(e1.ToString()); }
 
        }
ничего не выдает. Если ставить точки останова, то нет возможности вызвать token.IsCancellationRequested во время выполнения метода. Если нажать стоп после завершения task, то поток заново запускается.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
10.08.2019, 18:39
WersaT, этот код рабочий (Хотя и не очень правильный) ошибка в другом коде
0
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 293
10.08.2019, 18:45  [ТС]
Пойду разбираться дальше
WersaT, этот код рабочий (Хотя и не очень правильный) ошибка в другом коде
а что не так? Поясните пожалуйста
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
10.08.2019, 18:47
Цитата Сообщение от WersaT Посмотреть сообщение
а что не так?
нет Dispose сорса
повторном нажатии предыдущую таску уже не отменить
0
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 293
10.08.2019, 18:52  [ТС]
нет Dispose сорса
повторном нажатии предыдущую таску уже не отменить
Вы так имеете в виду?

private void button3_Click(object sender, EventArgs e)
{
cancelTokenSource.Dispose();
cancelTokenSource.Cancel();
}
Так ошибку выдает System.ObjectDisposedException: "CancellationTokenSource был удален."
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
10.08.2019, 18:55
Цитата Сообщение от WersaT Посмотреть сообщение
Вы так имеете в виду?
нет, диспоз только тогда, когда сорс уже отработал свое и больше не будет использоваться
0
6 / 4 / 3
Регистрация: 23.10.2010
Сообщений: 293
10.08.2019, 19:23  [ТС]
стыдненько... упустил, что в завершении token.IsCancellationRequested перед ретурном нужно было вставить строчку завершения метода)))
Все равно спасибо, что уделили мне время
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,689
Записей в блоге: 2
12.08.2019, 13:41
Цитата Сообщение от WersaT Посмотреть сообщение
упустил, что в завершении token.IsCancellationRequested перед ретурном нужно было вставить строчку завершения метода)))
Какую и где? Как в примере из первого сообщения?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2019, 13:41
Помогаю со студенческими работами здесь

Не запускается повторно поток.
Собственно есть поток: Dim a1 As New System.Threading.Thread(AddressOf test) Sub test() --операторы-- ...

Проект повторно не запускается на отладку
После написания кода я нажимаю для проверки F5. Возникает черный экран и я проверяю программу. Но повторно проверить почему то не всегда...

Если Outlook запускается через Task Scheduler, то макрос в нем не сохраняет вложения
Здравствуйте! В Outlook есть макрос, который анализирует тему входящих писем на наличие ключевых слов (команд) и сохраняет вложения из...

[UWP] Возвращаемым типом асинхронного метода должен быть void, Task или Task<T>
Создал асинхронный метод. Он должен на выходе вывести объект который состоит из строк. Пишет ошибка, что можно сделать? Первый скрин с...

Появляются ошибки, если в bpm-схеме после таймера идёт service task или script task (Alfresco's Activiti 6)
Здравствуйте. Вопрос по Alfresco's Activiti 6. Если в схеме ставлю после таймера (intermediate timer catching event или boundary timer...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru