Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/56: Рейтинг темы: голосов - 56, средняя оценка - 4.61
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260

Как лучше запустить метод в отдельном потоке?

28.02.2014, 18:06. Показов 10382. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу вашего опытного совета.
У меня есть статический метод, созданный в консольном приложении. При запуске вываливалась консоль и выдавала определённый инфо-текс. Этот метод я хочу использовать в приложении Windows Form.
При запуске его из Windows Form, естественно форма виснет, хотя свою функцию он выполняет.
Я придумал запустить его в параллельном потоке, чтобы метод делал своё дело. То что пишет консоль мне по сути не важно, и нужно чтобы во время этого пользователь мог общаться с формой.
Так как метод статический я передаю в него контрол на мою форму, чтобы он мог брать с текстбоксов данные.
Запускать и использовать метод я пытаюсь вот так :

C#
1
2
3
Thread tr = new Thread(StartModbusTcpSlave);
             tr.Start();
// tr.Abort(); - при закрытии формы, чтобы приложение не висело в процессах
Мой метод:

C#
1
2
3
4
public static void StartModbusTcpSlave(MainForm form)
        {
                                  // this code 
                      }
При объявлении
C#
1
2
Thread tr = new Thread(StartModbusTcpSlave);
             tr.Start();
- происходят две ошибки :

- new - Наиболее подходящий перегруженный метод для 'System.Threading.Thread.Thread(System.T hreading.ThreadStart)' имеет несколько недопустимых аргументов (CS1502)

- StartModbusTcpSlave - Аргумент "1": преобразование типа из "группа методов" в "System.Threading.ThreadStart" невозможно (CS1503)

Суть вопроса: 1. Как лучше организовать и как правильно (учитывая ошибки выше) работу этого метода в отдельном потоке? Т.е. либо убрать ошибки, либо другим способом.
2. Я понимаю, работать это должно, но состяпана моя программа невероятно коряво и через пень колоду и решить эту задачу можно и нужно правильно. Как? Укажите что и как сделать правильно.

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2014, 18:06
Ответы с готовыми решениями:

Как запустить метод в отдельном потоке?
Есть у меня класс и статический метод Class myClass { ... public static void Method1(string a, string b) } Нужно...

Как запустить async метод в отдельном потоке?
как мне запустить этот метод во вторичном потоке public async Task<List<string>> ApiReq(string url, int nm) { ...

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

6
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
28.02.2014, 18:21
StartModbusTcpSlave(MainForm form) - требуется ведь аргумент
его можно передать через tr.Start(аргумент) - но Start принимает object
значит вам нужно в самом методе StartModbusTcpSlave распаковать object
0
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
28.02.2014, 18:30  [ТС]
Написать вот так нельзя :
C#
1
Thread tr = new Thread(StartModbusTcpSlave(MainForm frm));
Цитата Сообщение от Diman777 Посмотреть сообщение
значит вам нужно в самом методе StartModbusTcpSlave распаковать object
Не совсем понимаю, простите. Пытаюсь писать на c# третий день.
Можно пример?
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
28.02.2014, 19:33
romasimeiz, что-то вроде этого...
C#
1
2
3
4
5
6
7
8
Thread tr = new Thread(StartModbusTcpSlave);
tr.Start(this);
 
public static void StartModbusTcpSlave(object ob)
        {
                 MainForm form = ob as MainForm;
                    // this code 
        }
Добавлено через 1 минуту
еще так попробуйте...
C#
1
Task.Factory.StartNew(() => StartModbusTcpSlave(this));
1
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
28.02.2014, 20:16
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
 
namespace ConsoleApplication25
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread thr = new Thread(new ThreadStart(run));
            thr.IsBackground = true;
            thr.Name = "New Thread";
            thr.Start();
            Console.ReadKey(true);
            thr.Abort();
        }
        static void run()
        {
            for (int i = 0; ; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(200);
            }
 
        }
    }
}
2
6 / 6 / 2
Регистрация: 11.04.2011
Сообщений: 260
03.03.2014, 10:54  [ТС]
C#
1
Task.Factory.StartNew(() => StartModbusTcpSlave(this));
Большое спасибо!С этим довольно интересно, но не могу найти метод как после закрытия программы убить процесс.
0
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
03.03.2014, 15:16
Цитата Сообщение от romasimeiz Посмотреть сообщение
но не могу найти метод как после закрытия программы убить процесс.
через CancellationToken
http://stackoverflow.com/quest... -tpl-tasks
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2014, 15:16
Помогаю со студенческими работами здесь

Как запустить метод в отдельном потоке?
есть метод string s = mac.termt(m, m.GetLength(0)).ToString(); он очень долго весит при обработке данных из за этого винда считает что...

Запустить метод в отдельном потоке
всем привет!) как запустить данный код в отдельном потоке, чтобы не зависала форма? ManagementObjectSearcher searcher = new...

Как запустить форму в отдельном потоке
Как запустить форму в отдельный поток.

Как запустить определённый код в отдельном потоке по нажатию кнопки?
как запустить определённый код в отдельном потоке по нажатию кнопки?(этот код бесконечен)

Как исполнять метод в отдельном потоке?
Как исполнять метод в отдельном потоке? То есть, в процессе работы программы метод вызывается множество раз, и исполнять вызовы нужно...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru