Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для useruser
166 / 90 / 38
Регистрация: 29.06.2015
Сообщений: 1,100

Выполнение кода в потоке

28.12.2015, 07:47. Показов 2640. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему код в потоке выполняется по разному?
Напишу псевдокод - так будет понятнее проблема.
Реальный код большой, но действия там простые.

Псевдокод
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
Создать поток;
Запустить поток (Функция1);
 
Функция1
{
Показать форму с сообщением
Выполнить Функцию2
Скрыть форму с сообщением
 
Показать форму с сообщением
Выполнить Функцию3
Скрыть форму с сообщением
}
 
Функция2
{
действия...
}
 
Функция3
{
действия...
Показать сообщение - функция 3 закончила работу
}
Результат - после скрытия формы с сообщением вижу - функция 3 закончила работу. Все нормально.

Упростим программу.
Псевдокод
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Создать поток;
Запустить поток (Функция1);
 
Функция1
{
Показать форму с сообщением
Выполнить Функцию2
Выполнить Функцию3
Скрыть форму с сообщением
}
 
Функция2
{
действия...
}
 
Функция3
{
действия...
Показать сообщение - функция 3 закончила работу
}
Результат - после скрытия формы с сообщением, через 5 секунд, вижу - функция 3 закончила работу.
Почему происходит задержка в несколько секунд? Есть подозрение, что форма с сообщением была скрыта до завершения работы функции3.
Но это не верно т.к. команды в потоке идут последовательно и должны выполняться последовательно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.12.2015, 07:47
Ответы с готовыми решениями:

Выполнение длительных вычислений и операций в отдельном потоке
Добрый вечер. Возникла проблема с вычислениями. Из базы данных (файл) читаются числа и выполняются с ними операции.....

Выполнение метода в отдельном потоке без await/async
В десктопном WPF проекте с .Net 4.0 необходимо сделать так: private void updateNowButton_Click(object sender, RoutedEventArgs e) ...

Выполнение нескольких запросов к БД в отдельном потоке
Собственно программа время от времени должна выполнять запросы в БД (Oracle и Hadoop). Иногда эти запросы на стороне БД могут выполняться...

1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.12.2015, 14:08
Цитата Сообщение от useruser Посмотреть сообщение
Напишу псевдокод - так будет понятнее проблема.
Реальный код большой, но действия там простые.
Вместо псевдокода лучше попробуйте написать с нуля настоящий код, но такой же простой — минимум того, что необходимо для демонстрации проблемы.
Если этот минимальный пример будет воспроизводить проблему — выкладывайте его сюда, будем думать.
Если в минимальном примере воспроизвести проблему не получится, значит в реальном коде вы делаете что-то странное, чего, возможно, не заметили или не учли — тут уже ничего не попишешь, придется смотреть реальный код.

Добавлено через 11 минут
Вот, набросал по второму псевдокоду минимальный пример:
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
private void button1_Click(object sender, EventArgs e)
{
    // Создать поток;
    Thread thread = new Thread(Func1);
 
    // Запустить поток (Функция1);
    thread.Start();
}
 
void Func1()
{
    // Показать форму с сообщением
    var form = new Form { Text = "Сообщение" };
    form.Show();
 
    // Выполнить Функцию2
    Func2();
 
    // Выполнить Функцию3
    Func3();
 
    // Скрыть форму с сообщением
    form.Close();
}
 
void Func2()
{
    // действия...
    Thread.Sleep(1000);
}
void Func3()
{
    // действия...
    Thread.Sleep(2000);
 
    // Показать сообщение -функция 3 закончила работу
    MessageBox.Show("функция 3 закончила работу");
}
Описанная вами проблема не наблюдается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.12.2015, 14:08
Помогаю со студенческими работами здесь

Выполнение кода в отдельном потоке
Итак есть форма. На ней кнопочка. Под кнопочкой трудоемкий алгоритм. Я хочу чтобы при нажатии на кнопочку запускался алгоритм в не главном...

Выполнение метода в отдельном потоке
Необходимо выполнить метод Search (или всю операцию message = client.Folders.Search("ALL", MessageFetchMode.Basic); неважно) в отдельном...

Выполнение действия в отдельном потоке
Привет! Вообщем, со своими лоу знаниями в C#, я столкнулся с проблемой во время написания программы. Я выполнил свой метод (который...

Выполнение определенных операций в отдельном потоке
Здравствуйте, только начал писать на c# wpf . Затруднялся с пониманием асинхроные потоки. Суть вопроса: по клику на кнопку происходит вызов...

Выполнение определенных операций в отдельном потоке
Во время выполнения кода форма, ясное дело, зависает и ожидает завершения операций. Мне необходимо сделать так, чтобы с формой можно было...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru