C# 在新线程中调用方法(方法名称来自字符串)?

C# 在新线程中调用方法(方法名称来自字符串)?,c#,.net,multithreading,winforms,invoke,C#,.net,Multithreading,Winforms,Invoke,我试图在winforms c应用程序中的新线程上调用一个方法。但是我需要方法名来自字符串 是否可以执行以下操作: public void newThread(string MethodName) { new Thread(new ThreadStart(MethodName)).Start(); } 我已经试过了,但似乎无法让它工作 任何建议都将不胜感激。我假设您希望从类本身调用方法 Type classType = this.GetType(); object obj = Activa

我试图在winforms c应用程序中的新线程上调用一个方法。但是我需要方法名来自字符串

是否可以执行以下操作:

public void newThread(string MethodName)
{
   new Thread(new ThreadStart(MethodName)).Start();
}
我已经试过了,但似乎无法让它工作


任何建议都将不胜感激。

我假设您希望从类本身调用方法

Type classType = this.GetType();
object obj = Activator.CreateInstance(classType)
object[] parameters = new object[] { _objval };
MethodInfo mi = classType.GetMethod("MyMethod");
ThreadStart threadMain = delegate () { mi.Invoke(this, parameters); };
new System.Threading.Thread(threadMain).Start();

如果不使用所需的类替换此。

一种方法是:

public void NewThread(string MethodName, params object[] parameters)
{
    var mi = this.GetType().GetMethod(MethodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
    Task.Factory.StartNew(() => mi.Invoke(this, parameters), TaskCreationOptions.LongRunning);
}

void Print(int i, string s)
{
    Console.WriteLine(i + " " + s);
}

void Dummy()
{
    Console.WriteLine("Dummy Method");
}


首先通过反射获取一个
MethodInfo
,然后在另一个线程代码中执行它来调用它。请参见MSDN about
MethodInfo.Invoke
了解示例1)方法的签名是什么?它是否与非通用的
操作
委托兼容?2) 它是一个静态方法还是一个实例方法?假设签名和可见性与您需要的内容兼容,那么它只是一行:
ThreadPool.QueueUserWorkItem(=>GetType().GetMethod(methodName).Invoke(this,null))这就是我所想的,很好的方法,谢谢。
NewThread("Print", 1, "test");
NewThread("Dummy");