Если вы знаете, что все ваши динамически загружаемые типы реализуют Run, не могли бы вы просто потребовать, чтобы все они реализовали IRunable и избавились от части отражения?
Type t = robotList[i];
IRunable o = Activator.CreateInstance(t) as IRunable;
if (o != null)
{
o.Run(); //do this in another thread of course, see below
}
Если нет, это будет работать:
for (int i = 0; i < robotList.Count; i++)
{
Type t = robotList[i];
object o = Activator.CreateInstance(t);
Thread thread = new Thread(delegate()
{
t.InvokeMember("Run", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, null);
});
thread.Start();
}