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

时间:2014-06-27 15:17:57

标签: c# .net multithreading winforms invoke

我试图在winforms c#app中调用新线程上的方法。但我需要方法名称来自字符串。

是否可以执行以下操作:

public void newThread(string MethodName)
{
   new Thread(new ThreadStart(MethodName)).Start();
}

我已经尝试但似乎无法让这个工作?

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

这样做的一种方法是:

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");
}

NewThread("Print", 1, "test");
NewThread("Dummy");

答案 1 :(得分:0)

我假设你想从类内部调用方法。

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();

如果没有用您需要的课程替换this