Я создаю приложение для рабочего стола C#. Как вызвать метод, который принимает несколько параметров в потоке. У меня есть метод Send (string arg1, string arg2, string arg3), мне нужно вызвать этот метод, используя поток, называемый SendingThread. Может ли кто-нибудь помочь с этим? Любая помощь будет высоко оценена.Как вызвать метод, который принимает несколько параметров в потоке?
ответ
Thread thread = new Thread(() => Send(arg1, arg2, arg3));
thread.Start();
Вы можете определить тип, который инкапсулирует параметры, которые вы хотите передать, и запустить поток с ссылкой на экземпляр этого типа.
При понижающем голосовании, пожалуйста, оставьте комментарий. Благодарю. –
хороший ответ, но как насчет прерывания указанной нити? –
f00: Не уверен, что я последую за вами здесь. Что вы имеете в виду? Ничего особенного в потоке, который начинается с ссылки на объект. –
Вы можете определить промежуточный метод и вспомогательный объект, чтобы сделать это:
public void MethodToCallInThread(string param1, string param2)
{
...
}
public void HelperMethod(object helper){
var h = (HelperObject) helper;
MethodToCallInThread(h.param1, h.param2);
}
И тогда вы начинаете нить с HelperMethod
, а не с MethodToCallInThread
:
var h = new HelperObject { param1 = p1, param2 = p2 }
ThreadPool.QueueUserWorkItem(HelperMethod, h);
Может кто-нибудь, пожалуйста, объясните -1 ?? –
У меня такое же :). это обычная глупая ситуация ... мне нравится красный цвет, но другой нравится желтый :) и я ненавижу все NON red-funs. – garik
Я подозреваю, что -1 предназначен для использования древнего стиля прохождения параметров, который действительно довольно громоздкий по сравнению с новым стилем, доступным в современных версиях C#. –
это может помочь. Вы можете определить свой метод отправки следующим образом, а затем можете использовать параметры.
string[] parameters = new string[3];
parameters[0] = arg1;
parameters[1] = arg2;
parameters[1] = arg3;
System.Threading.Thread SendingThread = new System.Threading.Thread(Send);
SendingThread.Start(parameters);
public void Send(object parameters)
{
Array arrayParameters = new object[3];
arrayParameters = (Array)parameters;
string str1 = (string)arrayParameters.GetValue(0);
string str2 = (string)arrayParameters.GetValue(1);
string str3 = (string)arrayParameters.GetValue(2);
///Following code here...
}
① Это излишне удаляет всю безопасность типов.(Необязательно, потому что вы можете просто передать строки вместо объекта.) ② Использование 'Array' действительно странно. Почему бы не привести к 'string []' напрямую? ③ Почему вы назначаете «новый объект [3]», а затем сразу же устарели? Это избыточно. ④ Что такое 'ReceiveMsgThread'? Вы этого нигде не объявили. ⑤ Что делает этот ответ, который у меня нет (кроме разрушения безопасности типа)? – Timwi
Как подчеркивается Timwi, этот код имеет множество проблем, несмотря на то, что он является принятым ответом. Пожалуйста, не используйте это. –
@Timwi: Прежде всего да, а не ReceiveMsgThread, это должен быть SendingThread. Мне жаль насчет того. Во-вторых, я взял его как массив, потому что вы не можете напрямую использовать тип объекта для строки []. Я передал строку [] в параметрах аргумента, как бы вы вынимали отдельные строки из параметров объекта. Вам нужно передать его в виде массива и извлечь значения из этого массива, передавая его как строку. Почему бы вам просто не попробовать и проверить, возможно ли это. А также в параметрах объекта мы можем передавать строки, int и т. Д. На разные типы, а затем извлекать соответствующие типы позже. –
- 1. Как вызвать метод, который принимает несколько параметров в C#
- 2. Метод, который принимает много параметров
- 3. Как вызвать метод, который принимает строку?
- 4. Как вызвать метод, который принимает несколько параметров, когда у меня есть один список значений?
- 5. Создайте рубиновый метод, который принимает хэш параметров
- 6. Как несколько классов могут вызвать один метод, который принимает экземпляр вызывающего класса в качестве параметра?
- 7. Как динамически вызывать метод, который принимает массив в качестве параметров?
- 8. Как вызвать метод, который возвращает интерфейс
- 9. метод, который принимает несколько типов перечислений
- 10. Метод POST, который принимает несколько аргументов
- 11. Как вызвать метод в фоновом потоке
- 12. Как вызвать метод без параметров?
- 13. C#: поток, который принимает объект дерева параметров
- 14. C# Как вызвать несколько параметров
- 15. Angular2: Как вызвать метод WebAPI, который принимает ODataQueryOptions
- 16. Как вызвать метод контроллера, который принимает две модели?
- 17. Метод, который принимает n Число параметров в C#
- 18. как вызвать метод в потоке графического интерфейса?
- 19. Как вызвать статический метод, который принимает 3 параметра
- 20. Как вызвать метод без параметров?
- 21. Невозможно вызвать метод, который принимает параметр в JSP
- 22. Конструктор, который принимает метод
- 23. JavaTesting метод, который принимает список как параметры
- 24. Bash getopt принимает несколько параметров
- 25. Метод, который принимает два ArrayLists как параметры
- 26. Общий метод, который принимает класс как параметр
- 27. Как вызвать метод на работающем потоке?
- 28. Как передать несколько параметров в потоке в VB
- 29. Как документировать аргумент, который принимает несколько типов
- 30. Как вызвать этот метод из двух параметров?
@ prateeksaluja20: Я отредактировал этот ответ, чтобы использовать имя метода. Яснее? – Timwi
выглядит неплохо для меня, в качестве альтернативы вы можете обернуть всю функциональность sendthread в своем собственном классе http://paste.pocoo.org/show/256213/ –
@ f00 зачем тратить время и силы на создание класса замыкания, когда компилятор это для вас? – Will