Я борюсь с концепцией, описанной ниже:
Пользователь проверяет x из 5 флажков с типом измерений, а затем нажимает кнопку «RUN».
На «RUN» OnClick () я создаю объект класса Measure.
class Measure
{
string measure_type;
SendCommandToArduino(string nameOfMeasurement)
...
}
Мне нужно запустить эти выбранные методы ПОСЛЕДОВАТЕЛЬНО (они НЕ МОГУТ работать асинхронно, потому что они используют последовательный COM).
Я жестко запрограммировал что-то вроде этого:
void Method1()
{
measurement.SendCommandToArduino("tetnienie");
}
void Method2()
{
measurement.SendCommandToArduino("jasnosc");
}
tPomiar1 = new Thread(Method1);
tPomiar1.Start();
tPomiar1.Join();
pomiar.DrawGraphTetnien(tetnienie_Chart);
tPomiar2 = new Thread(Method2);
tPomiar2.Start();
tPomiar2.Join();
MessageBox.Show("Done all measurements!");
Не удивительно - это сработало. Но:
Я до сих пор не знаю, как связать количество отмеченных флажков с количеством методов, запускаемых в этих потоках. Может быть, мне следует жестко закодировать MethodX для всех измерений, а затем запустить потоки из какого-нибудь списка list_of_threads?
Потоки излишни для этой цели (я полагаю), потому что самое длинное измерение занимает около 10 секунд ... Есть ли другой способ?
ThreadPool, Задачи, async / await? Я совершенно новичок в многозадачности / потоках
Я тоже попробовал что-то подобное, но я не закончил это решение, оно было слишком хардкорным:
List<Thread> list_of_threads= new List<Thread>();
List<Action> measureToDo = new List<Action>();
// link those additions with checkboxes
measureToDo.Add(Method1);
measureToDo.Add(Method2);
measureToDo.Add(Method3);
int i = 0;
foreach (Action action in measureToDo)
{
//substring this one to get method's name!
string methodName = action.Method.Name.ToString());
methodName = methodName.Substring(4,6) // limit of 9 methods here haha
}
foreach (var item in measureToDo )
{
RunThread(item.Method.Name.ToString());
}
void RunThread(Action a)
{
Thread t;
t = new Thread(new ThreadStart(a.Method.Name)).Start();
}
Для параметра measure_type я создал 5-битную строку -> «1», если был установлен флажок для этой позиции.
"01000" / "10011" и т. Д.
Заранее благодарим Вас за все советы / подсказки! :)