Укажите поток, который будет использоваться для задачи в c# - PullRequest
0 голосов
/ 22 января 2020

У меня есть приложение, в котором есть поток входящих данных. Когда приходит каждый пакет данных, я хочу обработать его в указанном потоке c, чтобы избежать проблем с синхронизацией. Как я могу создать поток для запуска определенного действия c, а затем запустить его с заданными параметрами для каждого входящего пакета данных? Есть ли лучший способ go об этом? то есть у меня это сейчас:

        Task.Run(()=>MainWindow.ChartData(dat[0], vd.airspeed, vd.yaw));

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

1 Ответ

3 голосов
/ 22 января 2020

Создайте класс, который создает отдельный поток и передает работу этому потоку. Другие классы могут работать с этим классом.

Это то, что называется диспетчером. Диспетчер может инкапсулировать очередь и некоторое время находиться в режиме ожидания одного потока, получить блокировку очереди, проверить очередь на наличие элементов, получить пару элементов из очереди, снять блокировку очереди, обработать некоторые элементы и go на некоторое время вернуться в спящий режим.

У диспетчера будет метод, который получит блокировку очереди, добавит рабочий элемент и снимет блокировку очереди. Этот метод будет вызываться другими потоками для публикации работы.

...