Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для FreeZon
8 / 10 / 8
Регистрация: 30.12.2013
Сообщений: 577
.NET 4.x

Потоки, блокировка не работает

14.03.2015, 23:27. Показов 834. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Напишу код сразу.

Основной код, смотрите закомментированые строчки:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private void thRemoveDogs_DoWork(object sender, DoWorkEventArgs e)
        {
            ThisImgLoad(pictureBox_lastDel);
            foreach (string userid in dog_id)
            {
                FormClass.DeleteUserGroup_Thread delete = new FormClass.DeleteUserGroup_Thread(_gid, userid);
                Thread delete_us = new Thread(new ThreadStart(delete.groupDeleteUser)); // Ниже скину метод groupDeleteUser
                delete_us.Start();
                delete_us.Join();
                dog_searched--; // Вот тут проблема
                label5.Text = "Осталось удалить: " + dog_searched; // Вот тут проблема
            }
            if (dog_searched == 0)
            {
                pictureBox_lastDel.Image = imageList1.Images[1];
                MessageBox.Show("Готово! ", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            button2.Invoke((Action)(() =>
            {
                button2.Visible = true;
            }));
            
        }
Класс DeleteUserGroup_Thread (метод groupDeleteUser ):

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private string _group_id;
        private string _user_id;
 
        public DeleteUserGroup_Thread(string group_id, string user_id)
        {
            this._group_id = group_id;
            this._user_id = user_id;
        }
        public void groupDeleteUser()
        {
            string resonse = "";
            XmlDocument xml = new XmlDocument();
            xml.LoadXml(Methods._GET("https://api.vk.com/method/groups.removeUser.xml?group_id=" + _group_id + "&user_id=" + _user_id + "&access_token=" + config.Default.token + "&v=5.27"));
            XmlNodeList first = xml.SelectNodes("response");
            foreach (XmlNode url in first)
            {
                resonse = url.InnerText;
            }
        }
Метод GET, из класса DeleteUserGroup_Thread :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static string _GET(string url) // GET запрос
        {
            
            return Task<string>.Factory.StartNew(() => { 
                try
                {
                    System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                    System.Net.WebRequest reqGET = System.Net.WebRequest.Create(url);
                    System.Net.WebResponse resp = reqGET.GetResponse();
                    System.IO.Stream stream = resp.GetResponseStream();
                    System.IO.StreamReader sr = new System.IO.StreamReader(stream);
                    string html = sr.ReadToEnd();
                    return html;
                }
                catch { return FormClass.Errors.Code(300); }
            }).Result;
        }

Сам вопрос, проблема:

У меня в background идет удаление юзера из группы вк, так вот я сделал её в метода, и поставил после старта .Join();
т.е где я закомментировал "Тут проблема" те строчки кода должны выполниться после удаления из группы. А часть юзеров не удаляется. И происходит все слишком быстро. Thread.Sleep(n) не вариант...

Добавлено через 4 часа 33 минуты
Хелп ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.03.2015, 23:27
Ответы с готовыми решениями:

Потоки - Блокировка/Синхронизация
Доброго времени суток дорогие форумчане. Возникла проблем с осваением потоков,а именно : имеем код OpenFileDialog file = new...

Потоки из пула и блокировка
почему с потоками из пула не рекомендуется использовать блокировку? почему проседает производительность?

Блокировка с двойной проверкой. Потоки
Та же самая проблема! Ведь этот код должен работать, объясняю почему: если указатель нулевой, то он не инициализирован, тогда захватывается...

4
14.03.2015, 23:51

Не по теме:

Мама дорогая, я немного в ужасе...
Запускаете асинхронное исполнение BackgroundWorker-а, в его обработчике запускаете поток с целью-методом, а в этом потоке еще один, через Task<T>... Разве нельзя было сделать проще и намного более удобнее?

0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18263 / 14188 / 5366
Регистрация: 17.03.2014
Сообщений: 28,874
Записей в блоге: 1
14.03.2015, 23:54
FreeZon, проблема возникает когда нет вызова delete_us.Join()?

Вообще код какой-то странный. Судя на названию метода thRemoveDogs_DoWork ты используешь BackgroundWorker. Значит метод thRemoveDogs_DoWork уже выполняется в отдельном потоке. Зачем тогда ты создаешь еще один поток? Что мешает вызвать метода groupDeleteUser напрямую? Далее в методе _GET ты запускаешь Task (еще один поток), но при это не используешь асинхронные методы или await. То есть пользы от Task никакой.

Поясни что именно ты патаешься решить. Удалить пользователей из некой группы по очереди показывая прогресс операции?
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
15.03.2015, 00:01
Возможно, после некоторого количества итераций сервер перестает отвечать на запросы ввиду их большой интесивности. Попробуйте в отладке прогнать ваш цикл, то бишь в более медлеенном режиме. Если все итерации отработают, то, видимо, в этом и проблема - слишком большое количество запросов. имхо
Либо, как вариант, добавьте логирование перед запросом и сразу после запроса. Слабое место - именно IO операция.

Добавлено через 4 минуты

Не по теме:

Зато код серьезнее выглядит. :)

0
 Аватар для FreeZon
8 / 10 / 8
Регистрация: 30.12.2013
Сообщений: 577
15.03.2015, 01:29  [ТС]
Нашел проблему, нужно было убрать Task в методе _GET.
т.к я останавливал Join() только backgroundWorker то метод гет выполнялся без остановки.
Убрал, все нормализовалось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2015, 01:29
Помогаю со студенческими работами здесь

не работает блокировка хотлинк
Всем добрый день установил себе такой код &lt;div&gt;Код&lt;/div&gt;&lt;div&gt;RewriteEngine on RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$...

Не работает блокировка сканирования портов
Здравствуйте! Настроил блокировку сканирования портов согласно https://wiki.mikrotik.com/wiki/Drop_port_scanners. При этом...

Почему не работает автоматическая блокировка элементов управления
Доброго времени суток. Недавно начал изучение ВБ6 (интересуют базы данных). Наставником выбрал Джона Коннэлла, но некоторые практикумы...

Не работает программа (потоки)
Изучаю java прохожу тему потоки не работает код Помогите пж. package com.company; public class Main { public static void...

СМА Zanussi FE925N, PNC 91475651000 не работает блокировка
СМА Zanussi FE925N, PNC 91475651000. (EWM 1000+) Изначально у клиента: светит &quot;конец стирки&quot;, машинка пищит, на кнопки не реагирует, в...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru