powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Управление потоком.
25 сообщений из 55, страница 1 из 3
Управление потоком.
    #39799743
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создаю тред
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
tx_run = new Thread(new ThreadStart(SendCanFrames));
if (!tx_run.IsAlive)
{
    running = true;
    tx_run.IsBackground = true;
    tx_run.Start();
}

private void SendCanFrames()
{
    while (running)
    {

    }
}


И теперь я хочу управлять им
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void Start()
{
    tx_run.Suspend();
}

public void Stop()
{
    tx_run.Resume();
}



Но на эти два метода получаю предупреждение
авторWarning CS0618 'Thread.Suspend()' is obsolete: 'Thread.Suspend has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources.

Warning CS0618 'Thread.Resume()' is obsolete: 'Thread.Resume has been deprecated. Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources.

а чем тогда пользоваться?
...
Рейтинг: 0 / 0
Управление потоком.
    #39799744
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7а чем тогда пользоваться?в сообщении же написано
use other classes in System.Threading, such as Monitor, Mutex, Event, and SemaphoreА вообще, какая задача в целом?
...
Рейтинг: 0 / 0
Управление потоком.
    #39799753
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Projenya7а чем тогда пользоваться?в сообщении же написано
use other classes in System.Threading, such as Monitor, Mutex, Event, and SemaphoreА вообще, какая задача в целом?
запускаю треды от 1 до 4 которые посылают данные. и каждый тред обновляет данные в своем контроле который находиться на главной форме
...
Рейтинг: 0 / 0
Управление потоком.
    #39799754
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мутексы и семафоры не останавливают тред
...
Рейтинг: 0 / 0
Управление потоком.
    #39799761
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
Код: c#
1.
new Thread

сейчас MS это пишет за вас.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799763
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7запускаю треды от 1 до 4 которые посылают данные. и каждый тред обновляет данные в своем контроле который находиться на главной формеэто не задача от пользователя.
Это решение от программиста.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799764
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7запускаю треды от 1 до 4 которые посылают данные. и каждый тред обновляет данные в своем контроле который находиться на главной форме
1) данные в контроле может обновлять только поток пользовательского интерфейса и он один. В отдельных потоках можно только готовить эти данные
2) для этого придуман TPL (Task, async, await...), посмотри на год издания учебника, которым ты пользуешься, выброси его в помойку, возьми современный и забудь про new Thread
...
Рейтинг: 0 / 0
Управление потоком.
    #39799811
listtoview
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Projenya7запускаю треды от 1 до 4 которые посылают данные. и каждый тред обновляет данные в своем контроле который находиться на главной форме
1) данные в контроле может обновлять только поток пользовательского интерфейса и он один. В отдельных потоках можно только готовить эти данные
2) для этого придуман TPL ( Task, async, await... ), посмотри на год издания учебника, которым ты пользуешься, выброси его в помойку, возьми современный и забудь про new Thread
о! спасибо!
чуть не забыл асинхронно сервис дергать
из соседней темы

а есть какие ниб рекомендации когда делать асинхронно, а когда нет?
вебсервис у меня отрабатывает до 200мс, нужно его асинхронно делать?
...
Рейтинг: 0 / 0
Управление потоком.
    #39799816
leguo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
listtoviewShocker.Proпропущено...

1) данные в контроле может обновлять только поток пользовательского интерфейса и он один. В отдельных потоках можно только готовить эти данные
2) для этого придуман TPL ( Task, async, await... ), посмотри на год издания учебника, которым ты пользуешься, выброси его в помойку, возьми современный и забудь про new Thread
о! спасибо!
чуть не забыл асинхронно сервис дергать
из соседней темы

а есть какие ниб рекомендации когда делать асинхронно, а когда нет?
вебсервис у меня отрабатывает до 200мс, нужно его асинхронно делать?


Прочитать современный учебник и сделать для себя вывод.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799818
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoviewа есть какие ниб рекомендации когда делать асинхронно, а когда нет?
вебсервис у меня отрабатывает до 200мс, нужно его асинхронно делать?Любые операции ввода-вывода (файл, БД, сервис) лучше делать асинхронно. 200мс - это уже много, а если еще протупит сеть или сервис - пользовательский интерфейс подвиснет.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799830
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Projenya7запускаю треды от 1 до 4 которые посылают данные. и каждый тред обновляет данные в своем контроле который находиться на главной форме
1) данные в контроле может обновлять только поток пользовательского интерфейса и он один. В отдельных потоках можно только готовить эти данные
2) для этого придуман TPL (Task, async, await...), посмотри на год издания учебника, которым ты пользуешься, выброси его в помойку, возьми современный и забудь про new Thread
Так как делать? Практически.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799831
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
listtoviewкогда делать асинхронно, а когда нет?есть. Не пихать его в каждую дырку.
listtoviewнужно его асинхронно делать?нет
...
Рейтинг: 0 / 0
Управление потоком.
    #39799833
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Так как делать? Практически.Написать требования по ТЗ не для программиста, а от пользователя. Что ему нужно., а не тебе.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799836
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Так как делать? Практически.Обчём вопрос? Ты описал задачу так:

jenya7запускаю треды от 1 до 4 которые посылают данные.используй await и Task-и вместо запуска тредовjenya7 и каждый тред обновляет данные в своем контроле который находиться на главной формеэто невозможно, эти треды не могут обновлять контролы, так как контролы может обновлять только поток пользовательского интерфейса. Можно, конечно, использовать .Invoke() на контроле, но обычно проще и понятнее получать данные в отдельном потоке, а обновлять в основном.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799854
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я создал пользовательский контрол. Два грида. Верхний отображает входящие сообщения, нижний исходящие.
И контрол включает методы
Код: 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.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
        public void RunTX()
        {   
            tx_run = new Thread(new ThreadStart(SendCanFrames));
            if (!tx_run.IsAlive)
            {
                tx_run.IsBackground = true;
                tx_run.Start();
            }
        }

        public void RunRX()
        {
            rx_run = new Thread(new ThreadStart(ReadCanFrames));
            if (!rx_run.IsAlive)
            {
                rx_run.IsBackground = true;
                rx_run.Start();
            }
        }

private void ReadCanFrames()
        {
            ushort prev_time_stamp = 0;

            while (running)
            {
                if (CanDevice != null)
                    CanDevice.Read(ref rx_can_msg, 1, ref read_cnt);

                if (read_cnt == 1)
                {
                    read_cnt = 0;

                    this.Invoke(
                         (MethodInvoker)delegate
                         {
                             dataGridViewCanRx.Rows[0].Cells[0].Value = rx_can_msg[0].Id.ToString("X");
                             dataGridViewCanRx.Rows[0].Cells[1].Value = rx_can_msg[0].Size.ToString();
                             dataGridViewCanRx.Rows[0].Cells[2].Value = BytesToString(rx_can_msg[0].Data);
                             dataGridViewCanRx.Rows[0].Cells[3].Value = (rx_can_msg[0].TimeStamp - prev_time_stamp).ToString();
                         });

                    prev_time_stamp = rx_can_msg[0].TimeStamp;
                }

                prev_time_stamp = rx_can_msg[0].TimeStamp;
            }
        }

        private void SendCanFrames()
        {
            if (tx_can_msg.Length == 0) return;

            VSCAN_MSG[] l_msgs = new VSCAN_MSG[2];

            while (running)
            {
                for (int i = 0; i < tx_can_msg.Length; i++)
                {
                    if (can_messages[i].CountRun < can_messages[i].CountMax)
                    {
                        can_messages[i].TimeStamp1 = DateTime.Now;
                        interval = can_messages[i].TimeStamp1 - can_messages[i].TimeStamp2;

                        if (interval.TotalMilliseconds >= can_messages[i].Period)
                        {
                            can_messages[i].TimeStamp2 = DateTime.Now;

                            l_msgs[0] = tx_can_msg[i];

                            //send CAN frame
                            CanDevice.Write(l_msgs, 1, ref written_cnt);
                            // send immediately 
                            CanDevice.Flush();

                            can_messages[i].CountRun++;

                            this.Invoke(
                                 (MethodInvoker)delegate
                                 {
                                     dataGridViewCanTx.Rows[i].Cells[4].Value = can_messages[i].CountRun.ToString();
                                 });

                            Thread.Sleep(can_messages[i].Delay);
                        }
                    }
                }
            }
        }


И таких четыре контрола я ставлю на главную форму и запускаю. Но работает плохо. Сильно тормозит. Такое ощущение что потоки мешают друг другу.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799857
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так это выглядит на главной форме
...
Рейтинг: 0 / 0
Управление потоком.
    #39799862
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Такое ощущение что потоки мешают друг другу.Мешают что? Обновлять содержимое контролов. Мешают конечно, потому что обновление идет В ОДНОМ потоке.
...
Рейтинг: 0 / 0
Управление потоком.
    #39799868
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Projenya7Такое ощущение что потоки мешают друг другу.Мешают что? Обновлять содержимое контролов. Мешают конечно, потому что обновление идет В ОДНОМ потоке.
Почему в одном? я запускаю 4 контрола а в каждом свой поток
Код: 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.
private void buttonStartAll_Click(object sender, EventArgs e)
        {
            int can_channel;
            for (can_channel = 0; can_channel < 4; can_channel++)
            {
                if (started[can_channel] == false)
                {
                    if (connected[can_channel] == true)
                    {
                        switch (can_channel)
                        {
                            case 0:
                                mainform.userControlCan1.Start();
                                mainform.userControlCan1.RunTX();
                                mainform.userControlCan1.RunRX();
                                buttonCan4Start.Text = "STOP";
                                started[can_channel] = true;
                                break;
                            case 1:
                                mainform.userControlCan2.Start();
                                mainform.userControlCan2.RunTX();
                                mainform.userControlCan2.RunRX();
                                buttonCan4Start.Text = "STOP";
                                started[can_channel] = true;
                                break;
                            case 2:
                                mainform.userControlCan3.Start();
                                mainform.userControlCan3.RunTX();
                                mainform.userControlCan3.RunRX();
                                buttonCan4Start.Text = "STOP";
                                started[can_channel] = true;
                                break;
                            case 3:
                                mainform.userControlCan4.Start();
                                mainform.userControlCan4.RunTX();
                                mainform.userControlCan4.RunRX();
                                buttonCan4Start.Text = "STOP";
                                started[can_channel] = true;
                                break;
                        }
                    }
                }
            }
        }
...
Рейтинг: 0 / 0
Управление потоком.
    #39799881
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Почему в одном? я запускаю 4 контрола а в каждом свой поток https://habr.com/ru/post/242937/
...
Рейтинг: 0 / 0
Управление потоком.
    #39799886
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Почему в одном?я написал это несколько раз, но ты упорно не желаешь обращать на это внимание
Shocker.Proданные в контроле может обновлять только поток пользовательского интерфейса и он один
...
Рейтинг: 0 / 0
Управление потоком.
    #39799899
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто о чём, а автор о своем)).
...
Рейтинг: 0 / 0
Управление потоком.
    #39799906
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Projenya7Почему в одном? я запускаю 4 контрола а в каждом свой поток https://habr.com/ru/post/242937/
Сделать как в примере? Но что для меня private void UpdateUI ? что именно обновлять в этом методе?
...
Рейтинг: 0 / 0
Управление потоком.
    #39799914
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, кто программист на твоем проект - ты или я?
Я тебе указываю в твои пробелы в знаниях, даю ключевые слова, даю ссылки на примеры и т.п. для того, чтобы ты в вопросе попытался разобраться.
А ты вместо этого с подходом "ну и откуда тут скопипастить"?
...
Рейтинг: 0 / 0
Управление потоком.
    #39799921
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProСлушай, кто программист на твоем проект - ты или я?
Я тебе указываю в твои пробелы в знаниях, даю ключевые слова, даю ссылки на примеры и т.п. для того, чтобы ты в вопросе попытался разобраться.
А ты вместо этого с подходом "ну и откуда тут скопипастить"?
а почему не скопипастить правильное решение? что тут криминального?
...
Рейтинг: 0 / 0
Управление потоком.
    #39799923
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7а почему не скопипастить правильное решение? что тут криминального?книжку возьми 2019 года, а не хабр)
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Управление потоком.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]