Поскольку вы хотите создать новый поток с помощью System.Threading.Thread
, а не выполнять вызов в существующем потоке пользовательского интерфейса или в потоке потоков, первое, на что нужно обратить внимание, это то, что с System.Threading.Thread
вы можете использовать либо ThreadStart
, либоParameterizedThreadStart
делегат.
Вам нужны параметры для основного метода вашего потока, но ParameterizedThreadStart
допускает только object
, что вынуждает вас приводить его к требуемому типу.Таким образом, мы просто используем замыкание, чтобы передать все аргументы, передаваемые безопасным способом.
public void InvokeOnNewThread(this MethodInfo mi, object target, params object[] parameters)
{
ThreadStart threadMain = delegate () { mi.Invoke(target, parameters); };
new System.Threading.Thread(threadMain).Start();
}
Пример использования:
mi.InvokeOnNewThread(obj, parameters);
Если вы работаете с.NET 2.0, затем выньте ключевое слово this
из списка параметров и назовите его так:
InvokeOnNewThread(mi, obj, parameters);
Это отбросит любое возвращаемое значение, но так же поступил и с нетронутым примером в вашем вопросе.Если вам нужно возвращаемое значение, оставьте комментарий.