• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Многопоточность В 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();
}
}

а как же тогда что это должно срабатывать по нажатию кнопок?
 
L

LuMee

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!