Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 3
1

Прерывание обработчика

07.03.2016, 19:50. Показов 1529. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть две кнопки. Одна запускает обработчик (StartButton) с бесконечным циклом. Вторая (CancelButton) должна прервать этот цикл. Как это сделать?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace TestAppl
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void StartButton_Click(object sender, EventArgs e)
        {
            while (true)
            {
                pictureBox1.BackColor = Color.Red;
                pictureBox1.Refresh();
                System.Threading.Thread.Sleep(300); 
                pictureBox1.BackColor = Color.Yellow;
                pictureBox1.Refresh();
                System.Threading.Thread.Sleep(300);
            }
            
        }
 
        private void CancelButton_Click(object sender, EventArgs e)
        {
 
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2016, 19:50
Ответы с готовыми решениями:

Прерывание выполнения обработчика по нажатию кнопки
Я создаю приложение в котором должны выполнятся достаточно объемные вычисления. Этот расчет должен...

Назначение обработчика
Вот нарыл в доке два типа назначения обработчиков на события. Например public event...

2 обработчика на 1 кнопку
нужно повесить 2 разных обработчика событий на 1 кнопку, возможно ли это и если да, то как?

Функции обработчика события
Здравствуйте форумчане значит проблема у меня такая есть класс ticTacToe (ttt для быстроты )...

4
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
07.03.2016, 20:00 2
ElectronixStyle,
лучше воспользуйтесь таймером:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Timer tmr;
private void Form1_Load(object sender, EventArgs e)
{
    tmr = new Timer();
    tmr.Interval = 300;
    tmr.Tick += new EventHandler(tmr_Tick);
}
 
void tmr_Tick(object sender, EventArgs e)
{
    if (pictureBox1.BackColor == Color.Red)
        pictureBox1.BackColor = Color.Yellow;
    else
        pictureBox1.BackColor = Color.Red;
}
 
private void StartButton_Click(object sender, EventArgs e)
{
    tmr.Start();
}
 
private void CancelButton_Click(object sender, EventArgs e)
{
    tmr.Stop();
}
1
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 3
07.03.2016, 20:23  [ТС] 3
C#
1
2
3
4
5
6
private void Form1_Load(object sender, EventArgs e)
{
    tmr = new Timer();
    tmr.Interval = 300;
    tmr.Tick += new EventHandler(tmr_Tick);
}
Не силен в C#. К какому контролу это относится? Что добавить в саму форму?

Вообще этот пример я привел, чтобы понять механизма работы. На самом деле у меня в обработчике StartButton создается процесс, привязанный к консольному приложению, а в теле while проверяется завершение процесса и инкрементируется ProgressBar. К сожалению полный код на работе(
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
07.03.2016, 20:47 4
Цитата Сообщение от ElectronixStyle Посмотреть сообщение
создается процесс, привязанный к консольному приложению
Значит нужно подписаться на событие завершение процесса:
C#
1
2
3
4
5
6
7
8
9
10
11
Process proc;
public Form1() {
    InitializeComponent();
    proc = new Process();
    proc.StartInfo.FileName = "cmd.exe";
    proc.EnableRaisingEvents = true;
    proc.Exited += (s, e) => { MessageBox.Show("Процесс завершён!"); };
    button1.Click += (s, e) => {
        proc.Start();
    };
}
1
0 / 0 / 0
Регистрация: 07.03.2016
Сообщений: 3
07.03.2016, 21:02  [ТС] 5
Спасибо! Завершить процесс наверное так
C#
1
2
CancelButton.Click += (s, e) => {
            proc.Kill(); };
0
07.03.2016, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2016, 21:02
Помогаю со студенческими работами здесь

Отмена обработчика события
Я разрабатываю калькулятор (все через это прошли наверно). Когда я в поле для ввода ввожу цифру на...

Обращение к элементу формы из обработчика
Есть обработчик для нескольких текстбоксов static public void FrequecyInput(object sender,...

Передача переменной из обработчика события
Доброго времени суток! Есть метод, который при возникновения события...

Динамическое создание обработчика событий
Здравствуйте, есть код: foreach (DataRow row in...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru