Login8
@Login8
Программист, критик, наватор

Можно ли в конструктор Thread() передать функцию через переменную?

Здраствуйте уважаемые знатоки.
Я создаю отдельный поток таким образом:
public static void func(object o){
// ...
// ...
}
Thread threads = new Thread(func); 
threads.IsBackground = true;
threads.Start("hehe");


В конструктор потоков Thread() мы передаем имя функции func и потом она выполняется в отдельном потоке, тут все понятно.
Можно ли как то передать в конструктор, имя функции через переменную, например как то так:
var f = "func";
Thread threads = new Thread(f); 
threads.IsBackground = true;
threads.Start("hehe");


Неспрашивайте зачем так делать, долго обьяснять.
У меня есть массив типа string где перечислены имена функций. Я хочу циклом пройтись по массиву , передать имена функций в Thread() и все они начнут работу. Такой план.

Какие будут идеи?
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
Thread threads = new Thread(func);
Вы передаете не имя функции, а метод. При этом метод должен соответствовать определенному описанию
delegate void ParameterizedThreadStart(object obj); // если передается параметр
delegate void ThreadStart(); // если не передается


Программа это всетаки набор функций/[методов обьектов]. И имен у этих функций как таковых нет.
Имена функций это extra информация, что в .Net можно получить через механизм Reflection.

Для вашей задачи, можно сделать коллекцию.
Dictionary<string, Action> funcs;
Куда сможете сохранить нужные вам имена и задать функцию для исполнения.
Thread threads = new Thread(funcs["имя функции"]);
Для более сложных вариантов, вам нужно будет смотреть в сторону использования Reflection
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы