我试图在winforms c#app中调用新线程上的方法。但我需要方法名称来自字符串。
是否可以执行以下操作:
public void newThread(string MethodName)
{
new Thread(new ThreadStart(MethodName)).Start();
}
我已经尝试但似乎无法让这个工作?
非常感谢任何建议。
答案 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
。