нажатию которой запускается поток:
private void button4_Click(object sender, EventArgs e)
{
Task.Run(() =>
{
Capture.Start();
Capture.ImageGrabbed += Capture_ImageGrabbed;
});
}
и вот функция Capture_ImageGrabbed
private void Capture_ImageGrabbed(object sender, EventArgs e)
{
if (pause == true)
{
Invoke((Action)(() =>
{
label19.Text = "Статус Сохранения:\nСохранение приостановленно";
}));
ss.WaitAsync();
}
else
{
Mat m = new Mat();
Capture.Retrieve(m);
if (folder != "")
{
if (creat_auto_save == true)
{
Directory.CreateDirectory(folder + "/auto");
creat_auto_save = false;
m.ToImage<Bgr, byte>().Save(folder + "/auto/" + num + "m.jpg");
}
else m.ToImage<Bgr, byte>().Save(folder + "/auto/" + num + "m.jpg");
}
num++;
}
}
мне необходимо сделать кнопку пауза, по нажатию которой будет останавливаться этот поток, и при повторном нажатии продолжаться, ну и собственно вот логика для этой кнопки
private void button13_Click(object sender, EventArgs e)
{
if (pause == false)
{
pause = true;
button13.Text = "Продолжить";
}
else
{
pause = false;
button13.Text = "Пауза";
}
}
и вот объявление ss
SemaphoreSlim ss = new SemaphoreSlim(0);
Что я не учёл? пауза конечно не работает
Очень стремный код
Потому и спрашиваю помощи
Как минимум, у тебя WaitAsync без await
Для этого необходимо его поместить в метод с типом async а мне нужен возвращаемый тип void
Почитай лучше про async await в целом
запуск приостановка перезапуск потока. https://stackoverflow.com/questions/10469687/how-to-pause-resume-a-thread
и у тебя никакого потока нет. таски не совсем про потоки.
Мм, блокировка потока
Так ему это и надо. Приостановить поток.
Ты тоже про асинхронность прочитай
причем тут асинхронность. он пишет про потоки.
Чтобы не блокировать поток кхуям
Обсуждают сегодня