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

Не могу остановить поток BackgroundWorker

02.06.2016, 01:09. Показов 1166. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
При нажатии кнопки отмена выполняющийся поиск в BackgroundWorker-е должен остановится, но что то не работает, помогите разобраться
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.WorkerSupportsCancellation = true;
            backgroundWorker1.WorkerReportsProgress = true;
        }
 
        private void b_SearchPrime_Click(object sender, EventArgs e)
        {
            int num_from=Convert.ToInt32(textFromPrime.Text) ;
            int num_to =Convert.ToInt32(textToPrime.Text);
            if (!Int32.TryParse(textFromPrime.Text, out num_from))
            {
                MessageBox.Show("Неверное значение начала диапазона");
                return;
            }
            if (!Int32.TryParse(textToPrime.Text, out num_to))
            {
                MessageBox.Show("Неверное значение конца диапазона");
                return;
            }
            b_SearchPrime.Enabled = false;
            textBoxRes.Text = String.Empty;
            b_CancelPrime.Enabled = true;
            FindPrimes FP = new FindPrimes(num_from, num_to);
            backgroundWorker1.RunWorkerAsync(FP);
        }
 
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            if (backgroundWorker1.CancellationPending)
            {
                e.Cancel = true;
                return;
            }
            else
            {
                FindPrimes FP = (FindPrimes)e.Argument;
                int[] primes = PrimesNumbers.SearchPrimes(FP.F, FP.T, backgroundWorker1);
                e.Result = primes;
            }
            
        }
 
        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                MessageBox.Show("Поиск отменен");
            }
            else if (e.Error != null)
            {
                // Ошибка была сгенерирована обработчиком события DoWork
                MessageBox.Show(e.Error.Message, "Произошла ошибка");
            }
            else
            {
                int[] primes = (int[])e.Result;
                for (int i = 0; i < primes.Length; i++)
                {
 
                    textBoxRes.Text += primes[i].ToString() + "  ";
                }
            }                             
            b_SearchPrime.Enabled = true;
            b_CancelPrime.Enabled = false;
        }
 
        private void b_CancelPrime_Click(object sender, EventArgs e)
        {
            this.backgroundWorker1.CancelAsync();
        }
 
        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBarPrime.Value = e.ProgressPercentage;
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2016, 01:09
Ответы с готовыми решениями:

Корректно остановить работу backgroundworker
Здравствуйте. Помогите остановить backgroundworker при нажатии на кнопку Стоп. BackgroundWorker...

BackgroundWorker блокирует главный поток
Подскажите как поправить. Код копирует файлы отмеченные галочками в ListView, увеличивает значение...

Как остановить поток
Имеем код using System; using System.Threading; using System.Windows.Forms; namespace...

Как остановить поток?
Как остановить поток вне метода в котором он был создан? Надеюсь, правильно сказал. Как я понял,...

1
Эксперт .NET
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
02.06.2016, 01:18 2
Нужно добавить if (backgroundWorker1.CancellationPending) { ... } в недра PrimesNumbers.SearchPrimes если там такой проверки еще нет.
0
02.06.2016, 01:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2016, 01:18
Помогаю со студенческими работами здесь

Как остановить поток?
Когда поставлена галочка в checkBox1, поток Monitor должен постоянно считывать текст из документа....

Остановить поток в ожидании нажатия кнопки
Здрасте , как мне заставить поток &quot;встать&quot; и перестать выполнять код в ожидании пока юзер нажмёт на...

Как остановить, а затем возобновить поток с циклом while внутри?
Помогите решить задачу! Есть поток Thread thread = new Thread(new...

Почему при Thread.Abort закрывается программа? Как остановить поток?
Есть класс для инвертирования движения мыши. При вызове метода Stop программа продолжает работать....


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

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