Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Aleksey3
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 70
1

Как убить зависший поток?

31.01.2017, 21:12. Просмотров 341. Ответов 4
Метки нет (Все метки)

В методе который запускается в потоке есть участок кода где посылаются запросы через прокси, на этом участке поток может бесконечно зависнуть. Убить его с помощью Thread.Abort() не получается. Уже замучился перезапускать программу, хочется как-то уже решить эту проблему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2017, 21:12
Ответы с готовыми решениями:

как убить поток и передать из него данные в класс формы?
здравствуйте. пользуюсь Visual Studif 2005, проект на C# под PDA. На С# пишу...

Убить спящий поток
Имеется 2 потока: t1 и t2. Внутри t1 выполнена команда t1.Sleep(int). После...

Убить предыдущий поток перед запуском нового
private void button3_Click(object sender, EventArgs e) { ...

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

Как убить поток???
Добрый день всем! Подскажите пожалуйста, как убить поток, не дожидаясь...

4
afront
1051 / 998 / 752
Регистрация: 29.02.2016
Сообщений: 3,187
31.01.2017, 21:24 2
http://stackoverflow.com/questions/1...rp-effectively
0
kolorotur
Эксперт .NET
10615 / 8796 / 2194
Регистрация: 17.09.2011
Сообщений: 15,070
Завершенные тесты: 1
31.01.2017, 21:32 3
Цитата Сообщение от Aleksey3 Посмотреть сообщение
В методе который запускается в потоке есть участок кода где посылаются запросы через прокси
Перепишите код так, чтобы он был неблокирующим — тогда проблема становится тривиальной.
0
Aleksey3
1 / 1 / 0
Регистрация: 10.11.2015
Сообщений: 70
31.01.2017, 21:41  [ТС] 4
Цитата Сообщение от kolorotur Посмотреть сообщение
Перепишите код так, чтобы он был неблокирующим — тогда проблема становится тривиальной.
А что тут блокирующего?
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
HttpWebRequest req;
            HttpWebResponse resp;
            StreamReader sr;
           
 
 
                try
                {
                    req = (HttpWebRequest)WebRequest.Create(URL);
                    WebProxy proxyObject = new WebProxy(Proxy.Substring(0, Proxy.IndexOf(":")), Int32.Parse(Proxy.Substring(Proxy.IndexOf(":") + 1)));
                   
                    req.Proxy = proxyObject;                  
                    req.Timeout = 7000;
                    req.UserAgent=UA;
                    resp = (HttpWebResponse)req.GetResponse();
                    sr = new StreamReader(resp.GetResponseStream(), Encoding.GetEncoding("UTF-8"));
                    string content = sr.ReadToEnd();
                    sr.Close();
 
                    if (resp.Headers["Set-Cookie"] != null)
                    {
                        GoodProxy.Add(Proxy);
                    
                        Invoke(checkProx, richTextBox1, Proxy, "LIME");
                    }
                }
                catch
                {
 
                    Invoke(checkProx, richTextBox2, Proxy, "RED");
                    
                }
0
_exp10der_
Warrior
490 / 417 / 177
Регистрация: 23.11.2014
Сообщений: 932
01.02.2017, 00:42 5
Если у вас с сетью можно использовать
HttpClient метод GetAsync в нем есть перегрузка которая принимает CancellationToken cancellationToken(отмену)

Вот пример
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
namespace ConsoleApplication293
{
    using System;
    using System.Net;
    using System.Net.Http;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
 
    internal class Program
    {
        private static void Main()
        {
            var listener = new HttpListener();
            listener.Prefixes.Add("http://localhost:7777/");
            listener.Start();
            ProcessAsync(listener);
 
            try
            {
                var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
 
                var awaiter = MainAsync(cts.Token).GetAwaiter();
                awaiter.GetResult();
            }
            catch (OperationCanceledException e)
            {
                Console.WriteLine(e.Message);
            }
 
            Console.ReadKey();
        }
 
        private static async Task MainAsync(CancellationToken token)
        {
            using (var client = new HttpClient())
            {
                var content =
                    await client.GetAsync("http://localhost:7777/", HttpCompletionOption.ResponseContentRead, token);
 
                Console.WriteLine(await content.Content.ReadAsStringAsync());
            }
        }
 
        private static async void ProcessAsync(HttpListener listener)
        {
            while (true)
            {
                var context = await listener.GetContextAsync();
                await HandleRequestAsync(context);
            }
        }
 
        private static async Task HandleRequestAsync(HttpListenerContext context)
        {
            // FOR SLOW
            await Task.Delay(TimeSpan.FromSeconds(10));
 
            var response = context.Response;
            var responseString = "<HTML><BODY> TEST!</BODY></HTML>";
            var buffer = Encoding.UTF8.GetBytes(responseString);
            response.ContentLength64 = buffer.Length;
            using (var output = response.OutputStream)
            {
                output.Write(buffer, 0, buffer.Length);
            }
        }
    }
}
0
01.02.2017, 00:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2017, 00:42

Как убить поток чужого процесса?
Всем привет! Через System.Diagnostics.GetProcesses() получаю список процессов....

убить поток + datagrid
на форме есть datagrid, каждая строка в нем создается из потока, так же из...

Не получается убить поток сервера
Есть многопоточный сервер (со следующим кодом - ничего умнее метки в одном...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru