Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/27: Рейтинг темы: голосов - 27, средняя оценка - 4.59
 Аватар для Naro
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71

Не закрывается поток

26.07.2010, 21:07. Показов 5619. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во время работы дополнительного потока закрываю программу крестиком сверху справа и закрывается главныи поток тока ,а 2 поток продолжает работать сделана кнопка норм закрытия но как сделать чтобы крестик закрывал и дополнительные потоки?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.07.2010, 21:07
Ответы с готовыми решениями:

Файловый поток не закрывается
StreamReader dict = File.OpenText("dict.txt"); ... dict.Close(); w = new StreamWriter("dict.txt", true); на строке w = new...

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

Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны
пишет:Текущий поток должен быть задан как поток однопоточного контейнера (STA), чтобы вызовы OLE стали возможны. Проверьте, что ваша...

9
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
26.07.2010, 21:30
А что происходит в них в этот момент, значит неправильна логика, ну и можно ведь всегда вызвать abort) например в обработчике закрытия формы
0
 Аватар для tasty_sock
139 / 137 / 21
Регистрация: 26.01.2010
Сообщений: 350
26.07.2010, 21:32
Можешь убить всю прогу при ивенте закрытия через
C#
1
2
3
4
5
foreach (Process p in Process.GetProcesses())
{
   if (p.ProcessName == "имя твоего процесса")
      p.Kill();
}
Неправильно, конечно, но работает.
0
70 / 69 / 10
Регистрация: 14.06.2009
Сообщений: 310
Записей в блоге: 1
26.07.2010, 21:48
когда создаешь поток, присваивай ему имя

C#
1
2
Thread Worker = new Thread(Work);
//где Work - функция, которая будет работать в потоке
создай событие для формы Form_Closing
(срабатывает когда закрывается форма)
и в нем проверяем.
C#
1
2
                if (Worker.IsAlive)
                    Worker.Abort();
можно сказать более подробно расписал ответ arvitaly
0
 Аватар для Naro
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
26.07.2010, 22:51  [ТС]
как принудительно закрыть зависший поток через кнопку?
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       
        private void button1_Click(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
            Thread Worker = new Thread(Work);
            Worker.Start();
        }
 
        public void Work()
        {
               //бесконечный цикл
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
             //принудительное закрывание потока  Worker 
        }
    }
 
}
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
26.07.2010, 22:53
Объявить переменную-указатель на поток вне метода button1_Click и использовать abort

как принудительно закрыть зависший поток через кнопку?
что такое зависший поток? опять неправильная логика его работы?
0
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
26.07.2010, 22:53
Брутфорс - это плохо.
У потока есть свойство IsBackground. Устанавливаем его в true и все будет закрываться.
0
Благотворец
 Аватар для arvitaly
142 / 122 / 13
Регистрация: 29.04.2009
Сообщений: 537
26.07.2010, 23:00
Брутфорс - это плохо.
У потока есть свойство IsBackground. Устанавливаем его в true и все будет закрываться.
Если уж так рассуждать, то поток должен закончить свою работу - сам. А основной поток должен ему сообщить об окончании работы
0
 Аватар для Naro
2 / 2 / 2
Регистрация: 13.07.2010
Сообщений: 71
26.07.2010, 23:04  [ТС]
Так чтоли, после Worker.Abort(); 2 поток досихпор работает. А бесконечный цикл это если поток долго работает и хочется его отменить и потом запустив поток заново с другими параметрами!
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
 
namespace WindowsFormsApplication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       
        private void button1_Click(object sender, EventArgs e)
        {
            CheckForIllegalCrossThreadCalls = false;
            Thread Worker = new Thread(Work);
            Worker.Start();
        }
 
        public void Work()
        {
               //бесконечный цикл
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
                       Worker.IsBackground = true;
            Worker.Abort();
        }
    }
 
}
0
sleepy
 Аватар для sleepwalker
78 / 53 / 6
Регистрация: 29.07.2009
Сообщений: 179
26.07.2010, 23:07
Цитата Сообщение от arvitaly Посмотреть сообщение
Если уж так рассуждать, то поток должен закончить свою работу - сам. А основной поток должен ему сообщить об окончании работы
Считаю, что такой подход катит в случае, если в потоке выполняется что-то важное. Например, запись в файл. Тогда надо проверять при выходе и дождаться закрытия потока.
А для остальных потоков хватит isBackground и не надо будет писать всякие аборты и прочее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.07.2010, 23:07
Помогаю со студенческими работами здесь

[WPF] Вызывающий поток не может получить доступ к данному объекту, т.к. владельцем этого объекта является другой поток
Здравствуйте пытаюсь реализовать кросспоточное пополнение listbox в WPF С#, но и в итоге получаю следующую ошибку: void...

Ошибка: вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
Ошибка в "progressBar1.Value += 50;", вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта...

Не закрывается поток созданный в другом классе
Здравствуйте, подскажите пожалуйста как грамотно отключать поток из form,. у меня даже после закрытия формы потоки продолжают слать смски ...

Вызывающий поток не может получить доступ к объекту, так как его владельцем является другой поток
Есть форма MainWindo, есть класс AB. В форме единая точка доступа к элементам формы. public static MainWindow Forma = null; ...

Создать поток сжатия GZipStream, и перенести данные из открытого файла в поток GZipStream
Здравствуйте. Объясните мне пожалуйста следующую вещь: Необходимо открыть файл для чтения. Создать поток сжатия GZipStream, и перенести...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru