Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/75: Рейтинг темы: голосов - 75, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24

Вывод потоков выделенного процесса

18.05.2013, 11:53. Показов 13881. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Нужно вывести в листбокс ID потоков процесса, который будет активирован в ListView. Ниже приведен код, но программа работает не так, как хотелось бы. Подскажите, в чем проблема...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        private void proclist_ItemActivate(object sender, EventArgs e)
        {
            try
            {
                Process pp = Process.GetCurrentProcess();
                ProcessThreadCollection prt;
                prt = pp.Threads;
                ThreadsAdd(prt);
                MessageBox.Show("Hello");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
 
        private void ThreadsAdd(ProcessThreadCollection prt)
        {
            for(int nn = 0; nn<=prt.Count; nn++)
            this.listBox1.Items.Add(prt[nn].Id);
        }
Добавлено через 10 минут
Проблема еще в том, что выводит одинаковые потоки для любого процесса.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2013, 11:53
Ответы с готовыми решениями:

Id выделенного процесса в listview
Здравствуйте! Ребята, подскажите как получить ProcessID выделенного элемента в listview? В listview я так добавляю процессы: ...

Запуск двух потоков и просмотр системной информации о физической и виртуальной памяти процесса
Разработать программу, в которой есть возможность запуска двух потоков и просмотр системной информации о физическом и виртуальную память...

CPU выделенного процесса
Ребят, вывел процессы при нажатии на любой, записываю имя его. И пытаюсь сделать чтобы показывало CPU каждого выделенного процесса, но при...

21
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 12:21
Цитата Сообщение от R_D Посмотреть сообщение
Process.GetCurrentProcess();
Вы тем самым получаете информацию о текущем процессе (вашем приложении) => и выводите потоки только для него.
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 12:25  [ТС]
Цитата Сообщение от NickoTin Посмотреть сообщение
Вы тем самым получаете информацию о текущем процессе (вашем приложении) => и выводите потоки только для него.
Хм, а что сделать, чтоб выводились потоки для активированного двойным кликом процесса??
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 12:30
Получить либо имя выделенного процесса, либо Id и тогда использовать GetProcessByName или GetProcessById соответственно...
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 12:49  [ТС]
Цитата Сообщение от NickoTin Посмотреть сообщение
Получить либо имя выделенного процесса, либо Id и тогда использовать GetProcessByName или GetProcessById соответственно...
Спасибо. Возникает тогда вопрос... Как получить ID процесса? Ниже код, но требуется значение pft.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void proclist_ItemActivate(object sender, EventArgs e)
        {
            try
            {
                Process pft;
                int ppid = pft.Id;
                Process pp = Process.GetProcessById(ppid);
                ProcessThreadCollection prt;
                prt = pp.Threads;
                ThreadsAdd(prt);
                MessageBox.Show("Hello");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 13:10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        public Form1()
        {
            InitializeComponent();
            listView1.ItemSelectionChanged += listView1_ItemSelectionChanged;
        }
 
        void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            listView2.Items.Clear();
            ((Process)e.Item.Tag).Refresh();
            foreach (ProcessThread th in ((Process)e.Item.Tag).Threads)
                listView2.Items.Add(new ListViewItem(th.Id.ToString()));
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (var proc in Process.GetProcesses())
            {
                listView1.Items.Add(new ListViewItem(proc.ProcessName) { Tag = proc });
            }
        }
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 13:50  [ТС]
Спасибо большое! Но мне надо вывести ID потоков в listBox. Также метод Item не найден. Подскажите, что делать?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 13:55
Проект прикрепите в тему
Цитата Сообщение от R_D Посмотреть сообщение
Также метод Item не найден
иначе не понятно почему не найден...
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 14:02  [ТС]
prob1.rar

Программа должна:
1. Выводить все процессы и обновлять каждые 0,5 сек. (Еще не доработано)
2. Выводить в Листбокс список потоков выбранного процесса.

Написана на VS2010.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 14:15
R_D, почему Вы подписываетесь на событие ItemActivate, когда я приводил для ItemSelectionChanged? От того и ошибка.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            proclist.ItemSelectionChanged += proclist_ItemSelectionChanged;
 
        // ... 
 
        //Активация процесса двойным кликом для вывода потока
        private void proclist_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            try
            {
                listBox1.Items.Clear();
                foreach (ProcessThread th in Process.GetProcessesByName(e.Item.Text)[0].Threads)
                    listBox1.Items.Add(th.Id.ToString());
 
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Да еще и 2 раза на событие ItemActivate подписываетесь, один раз через дизайнер, второй раз через конструктор класса Form1...
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 14:21  [ТС]
Спасибо большое! Все исправлено.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 14:22
Цитата Сообщение от NickoTin Посмотреть сообщение
Process.GetProcessesByName(e.Item.Text)[0].Threads
Вот тут будет проблема если запущено два процесса с одним именем, подумайте над решением
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 14:30  [ТС]
Окей, все изучим! А еще... Можно как-нибудь свойства потока смотреть после вывода??
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 14:43
Цитата Сообщение от R_D Посмотреть сообщение
Можно как-нибудь свойства потока смотреть после вывода??
Конечно можно, если сохранить где-нибудь ссылку на ProcessThread, как я это делал с Process (сохранял полученный экземпляр Process в свойстве Tag ListViewItem'а и при выборе элемента в ListView работал с этим свойством).

Т.к. ListBox не имеет какого-то специфичного класса для хранения элементов (хранит элементы как object, а ListView, например, как ListViewItem), то и свойства Tag по умолчанию у его элементов нет, тогда нужно писать собственный класс который будет выступать в роли элемента, и в нём уже хранить всю нужную информацию. Пример такой реализации есть здесь.
Ну или просто в замен ListBox использовать ListView и тогда будет Tag, как больше нравится.
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 14:52  [ТС]
Так, как я понял, отдельный класс для Tag вот:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        class LIST_TAG_EX
        {
            public string Name { get; private set; }
 
            public Color Color { get; set; }
 
            public LIST_TAG_EX ( string Name, Color Color ) {
                this.Name = Name; this.Color = Color;
            }
 
            public override string ToString () {
                return this.Name;
            }
        }
Но как тогда мне вывести свойства потока, скажем, в MessageBox при двойном клике элемента в listbox?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 15:01
Цитата Сообщение от R_D Посмотреть сообщение
отдельный класс для Tag вот
Да.
Цитата Сообщение от R_D Посмотреть сообщение
MessageBox при двойном клике элемента в listbox
На примере этого класса:
C#
1
2
3
4
5
6
        private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            var tag = listBox1.SelectedItem as LIST_TAG_EX;
 
            MessageBox.Show(tag.Color.ToString());
        }
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 15:16  [ТС]
Переделал класс:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        class LIST_TAG_EX  //класс для хранения в listBox1
        {
            public ProcessThread pthr { get; set; }
 
            public LIST_TAG_EX(ProcessThread pthr)
            {
                this.pthr = pthr;
            }
 
            /*public override string ToString()
            {
                return this.Name;
            }*/
        }
Также сделал вывод:
C#
1
2
3
4
5
6
 private void listBox1_MouseDoubleClick_1(object sender, MouseEventArgs e)
        {
            var tag = listBox1.SelectedItem as LIST_TAG_EX;
 
            MessageBox.Show(tag.pthr.ToString());
        }
Выходит исключение, что ссылка на объект не указывает на экземпляр объекта. В чем прокол?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 15:34
Как добавляете элементы в ListBox?
1
0 / 0 / 0
Регистрация: 16.03.2013
Сообщений: 24
18.05.2013, 15:41  [ТС]
Цитата Сообщение от NickoTin Посмотреть сообщение
Как добавляете элементы в ListBox?
Как вы мне показали:
C#
1
2
                foreach (ProcessThread th in Process.GetProcessesByName(e.Item.Text)[0].Threads)
                    listBox1.Items.Add(th.Id.ToString());
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8725 / 3677 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
18.05.2013, 16:12
R_D, неужто никаких мыслей не возникает почему так? Пересмотрите пример того как этот класс используется, по ссылке выше.

Кликните здесь для просмотра всего текста
C#
1
listBox1.Items.Add(new LIST_TAG_EX(th));
Чтобы вывод в ListBox был нормальным, а не имя класса, нужно переопределить метод ToString у LIST_TAG_EX (пример, опять же по ссылке).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.05.2013, 16:12
Помогаю со студенческими работами здесь

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

Распознавание потоков процесса
Здраствуйте, такой вопрос появился. Чтобы защитить процесс от всяких инжекторов, нужно сделать распознавание своих и чужих потоков в данном...

По ID процесса узнать количество потоков
Пытаюсь по ID процесса узнать количество потоков public int GetCountThread(int processId) { int countThreads = 0; ...

Число потоков процесса и их приоритет
Здравствуйте. Мне дали задание в windows forms вывести в таблицу список процессов с отображением их идентификаторов (PID), имени,...

Копирование выделенного текста в HTML странице ссылкой и id значением первого выделенного абзаца
В общем так: На странице имеется длинный текст со множеством абзацами заключённые в &lt;p&gt; теги, которые имеют собственное цифровое...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru