您好,我如何使用线程参数调用 System.Reflection.MethodInfo.Invoke() 。
例如..
假设我有一个方法,允许您传入一个表示
类名并动态调用相应的类方法,现在我想要
使用线程调用此 Methodinfo.invoke ,我不知道如何执行此操作,因为我正在使用参数调用调用。 meb 给出的代码片段。感谢您的帮助
Type classType = objAssembly.GetType("MyClassName");
object obj = Activator.CreateInstance(classType)
bject[] _objval = new object[3];
object[] parameters = new object[] { _objval };
MethodInfo mi = classType.GetMethod("MyMethod");
mi.Invoke(obj, parameters); // <---**How do i call this with threads.. ????**
因为你想创建一个新线程System.Threading.Thread
首先要注意的是,不要在现有的 UI 线程或线程池线程上进行调用System.Threading.Thread
你可以使用ThreadStart
or ParameterizedThreadStart
代表。
您确实需要线程的 main 方法的参数,但是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);
这将丢弃任何返回值,但您问题中的无线程示例也是如此。如果您需要返回值,请发表评论。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)