Многопоточность В C#

  • Автор темы Автор темы Villiya
  • Дата начала Дата начала
V

Villiya

доброго всем времени суток.
помогите разобраться: у меня проект C# FormApplication в нем есть 2 формы Form1 и Form2, на Form2 есть кнопка "расчет" при нажатии на которую происходит вызов функции Go(), на Form1 находится кнопка "визуализация", которая вызывает Visualisation() - визуализацию того процесса, который расчитывается в Go(), но получается так,что у меня с начала считается до конца Go() и при вызове Visualisation() у меня визуализируется только последняя картинка из Go(), а мне нужно чтобы Go() считался как бы в фоне, и при этом можно было вызывать в любой момент расчета Visualisation(). насколько понимаю для этого нужно использовать 2 потока, при этом Go() будет находится в основном потоке, а Visualisation() в параллельном. т.е. все это будет выглядеть как-то так?

Код:
class Class1
{
public void Go()
{
//какое-то вычисление
}
}
class Class2
{

public void Visualisation()
{
//что-то там
}
}

class Program
{
static void Main()
{
ThreadClass tc = new ThreadClass();
Thread firstthread = new Thread(new ThreadStart(tc.Go));
Thread secondthread = new Thread(new ThreadStart(tc.Visualisation));
firstthread.Start();
secondthread.Start();
}
}

а как же тогда что это должно срабатывать по нажатию кнопок?
 
Я бы сделал так:
1. Код метода Go запускается в отдельном потоке
2. В ходе выполнения метода Go время от времени выстреливается некоторе событие, уведомляющее о выполнении очередного этапа расчета
3. Обработчик вышеуказанного события должен соответствующим образом обновлять визуализацию процесса (сдвигать там прогресс-бар, перерисовывать картинку и т.п.). Не забываем, что обработчик дергается не из основного потока, так что надо учитывать InvokeRequired.

Если не стоит задача реализовать все строго своими руками, имеет смысл поглядеть на класс BackgroundWorker; он все вышеперечисленное предоставляет "из коробки", остается только нарисовать обработчики нужных событий.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab