Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651

Остановка потока

16.07.2018, 16:58. Показов 1534. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Есть таймер, работающий в отдельном от основного потоке(Program.Check() - обработчик таймера):
C#
1
var timer = new System.Threading.Timer(new TimerCallback(Program.Check), null, 0, 3000);
При получении изображения с сервера(байтового массива) таймер останавливается. Эти 2 события не связаны между собой хотя бы потому, что находятся в разных потоках. А просто так один поток в другой не "залезет"
Обработчик таймера:
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void Check(object obj)
{        
  Form1.client.Request(Form1.HOST, JsonConvert.SerializeObject(new Report(5, 
  Form1.Id, "", "", "", null, "", null)));
            
  try
  {
    if (JsonConvert.DeserializeObject<Report>(Form1.client.Response()).Id == Form1.Id)
    {
       _mainForm.SetTsslTextColor(Color.Green);
       _mainForm.SetTsslText("Подключение к серверу: есть");                    
     }
   }
   catch
   {
     Form1.Disconnected = true;
     _mainForm.SetTsslTextColor(Color.Red);
     _mainForm.SetTsslText("Подключение к серверу: отсутствует");                
    }
}
Где: _mainForm - private static Form1, client.Request() - метод, отправляющий запрос на сервер, Report - отправляемая структура, client.Response() - метод, получающий ответ от сервера, Tssl - ToolStripStatusLabel


Обработчик принятия картинки:
Кликните здесь для просмотра всего текста
C#
1
2
3
client.Request(HOST, JsonConvert.SerializeObject(new Report(7, Id, "", "", "", null, "", null)));            
ms = new MemoryStream(JsonConvert.DeserializeObject<Report>(client.Response()).Image);
PictBox1.Image = Image.FromStream(ms);


Совершенно не могу понять, как Обработчик принятия картинки может повлиять на таймер...

Добавлено через 32 минуты
Основное назначение таймера: проверять соединение с сервером методом отправки запроса на него (3 строка)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.07.2018, 16:58
Ответы с готовыми решениями:

Запуск и остановка потока
Правильная ли реализация управления потоком была приведена в программе? Или же есть более эффективные методы чтобы реализовать управление...

Остановка паралельного потока
Есть программа. Работает в 2 потока. когда первый поток нашёл нужную строку в тексте он выводит сообщение что всёок. как при этом можно...

Запуск и остановка потока
Всем привет! private void btnRotate_Click(object sender, EventArgs e) { Thread thread = new Thread(Rotate); rot =...

11
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,274
Записей в блоге: 14
16.07.2018, 17:41
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Эти 2 события не связаны между собой хотя бы потому, что находятся в разных потоках.
Раз у вас работает, а не падает, то здесь ОДИН поток - GUI. Потому что в обоих участках кода идёт прямое обращение к контролам GUI.

Добавлено через 3 минуты
Проверьте, не совпадают ли Id текущего потока в обоих обработчиках?

Добавлено через 1 минуту
Другой вариант - поток GUI подвисает на время загрузки картинки. Поэтому очередь сообщений его окна останавливается. Поэтому не срабатывают посторонние обращения _mainForm.SetTsslTextColor и _mainForm.SetTsslText.
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
16.07.2018, 19:12  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
то здесь ОДИН поток - GUI
Проверил специально: простым while(true) зациклил основной поток. Сообщения на сервер, тем не менее, поступали. Т.е. все-таки, поток таймера отдельный
Цитата Сообщение от Rius Посмотреть сообщение
не совпадают ли Id
Выводил при каждом срабатывании таймера ID потока(начинался отсчет с 5, если это имеет какое-то значение) и после принятия массива в обработчике принятия - ID был постоянным(1)
Цитата Сообщение от Rius Посмотреть сообщение
поток GUI подвисает на время загрузки картинки
Картинка маленькая, зависание вообще незаметно, если оно вообще есть. Хотя должно быть. Но при таком размере - минимально
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,274
Записей в блоге: 14
16.07.2018, 19:15
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Выводил при каждом срабатывании таймера ID потока(начинался отсчет с 5, если это имеет какое-то значение)
Из пула берётся, значит.
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Картинка маленькая, зависание вообще незаметно, если оно вообще есть. Хотя должно быть. Но при таком размере - минимально
Это не столько от размера картинки зависит, сколько от отзывчивости сервера и сети. Проверьте время выполнения загрузки через Stopwatch.
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
16.07.2018, 19:31  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Из пула берётся
И что из этого следует?
Цитата Сообщение от Rius Посмотреть сообщение
Проверьте время выполнения загрузки
Колебалось около 00:00:00.08 Довольно быстро, по-моему
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,274
Записей в блоге: 14
16.07.2018, 19:34
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
И что из этого следует?
Что это отдельный поток, всё нормально.
Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
При получении изображения с сервера(байтового массива) таймер останавливается.
Что вы подразумеваете под останавливается? Притормаживается периодический вызов от таймера, останавливается вообще, или форма подвисает?
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
16.07.2018, 19:57  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Что вы подразумеваете под останавливается?
Как уже сказал, в обработчике таймера отправляется запрос на сервер. Под "останавливается" я понимаю то, что прекращается отправка на сервер

Добавлено через 55 секунд
При каждой отправке на сервере выводится сообщение о том, что такой-то пользователь отправил запрос на проверку соединения

Добавлено через 19 минут
Может, есть еще способ создания таймера?
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,274
Записей в блоге: 14
16.07.2018, 20:04
Вы меня окончательно запутали...

Цитата Сообщение от Zwelenewskiy Посмотреть сообщение
Может, есть еще способ создания таймера?
Запустите отдельную задачу, где ждите нужное число миллисекунд и выполняйте запрос.
Если вам два одновременно запроса нужно, сделайте две задачи и в каждой используйте свой отдельный клиент.
0
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
16.07.2018, 20:17  [ТС]
Rius, не скажете, как создать задачу?
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,274
Записей в блоге: 14
16.07.2018, 20:29
Как-то так.
Если прокатит, можно и с таймером подумать.
Вложения
Тип файла: 7z WindowsFormsAppZwelenewskiy.7z (5.8 Кб, 4 просмотров)
1
 Аватар для Zwelenewskiy
129 / 127 / 107
Регистрация: 09.01.2017
Сообщений: 1,651
16.07.2018, 20:41  [ТС]
Rius, сейчас попробую этим путем пойти. Но, все-таки, почему не проходит фокус с таймером?.. Имеет смысл скинуть весть проект?)
0
Эксперт .NET
 Аватар для Rius
13084 / 7644 / 1670
Регистрация: 25.05.2015
Сообщений: 23,274
Записей в блоге: 14
16.07.2018, 20:42
Есть.
Только без навороченных зависимостей, типа MSSQL и доступа к десятку аккаунтов вымерших соцсетей...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.07.2018, 20:42
Помогаю со студенческими работами здесь

Корректная остановка потока
есть код формы using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using...

Принудительная остановка и приостановка потока
Как принудительно остановить и приостановить поток? такой код: public void CreateThreads(int threads) { ...

Остановка потока из потока
Здравствуйте. Нужна ваша помощь с такой вот задачей Class1 c1 = new Class1(); Thread thread = new Thread(c1.Function1) ...

Как из потока управлять формой, если функции потока находятся в другом классе?
Добрый вечер. Возник такой вопрос, никак не могу разобраться. Как из потока управлять формой, если функции потока находятся в другом...

Обращение к элементу WinForms из потока, отличного от потока, в котором это элемент был создан
Пишу приложение, котором при загрузке формы в textbox на этой форме заносятся данные. Причем данных много и процесс занимает длительное...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
моя боль
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 ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru