Вы пытаетесь вызвать нестатический метод без предоставления ссылки на экземпляр объекта, для которого этот метод должен быть вызван. Поскольку вы работаете с методами класса MainForm
, вы должны предоставить объект типа MainForm
в первом параметре MethodInfo.Invoke(Object, Object[])
, в вашем случае:
if(method.IsStatic)
method.Invoke(null, null);
else
method.Invoke(this, null);
Пример выполнения метода в отдельном потоке:
public MethodInfo GetSelectedMethod()
{
var index = testListBox.SelectedIndex;
if (index < 0) return;
var value = testListBox.SelectedValue;
return value as MethodInfo;
}
private void ThreadProc(object arg)
{
var method = (MethodInfo)arg;
if(method.IsStatic)
method.Invoke(null, null)
else
method.Invoke(this, null);
}
private void RunThread()
{
var method = GetSelectedMethod();
if(method == null) return;
var thread = new Thread(ThreadProc)
{
Name = "UIThread",
};
thread.Start(method);
}