In breve:
Ho un programma Winform (ma anche se fosse una Console Application sarebbe la stessa cosa).
Faccio il load di un assembly.
Individuo un tipo. Il tipo che individuo è la classe Program.
Invoco il metodo Main(string[] args).
Il metodo statico Main(string[] args) finisce con un Application.Run(istanza di un FormPippo).
Quando quindi dal mio programma faccio queste operazioni, la form FormPippo appare ma il controllo viene trasferito appunto a questo programma. Cioè non posso fare altre azioni sul mio programma perchè la console è come se non fosse attiva..
Qualcuno ha una soluzione a questo problema?
Vi faccio vedere il codice che utilizzo tenendo presente che il programma che richiama carica l'assembly e invoca il metodo main è una console application:
codice:
static void Main(string[] args)
{
Assembly assembly = Assembly.LoadFile(@"C:\Eseguibile.exe");
Type t = assembly.GetType("Eseguibile.Program");
object[] p = new object[] { new string[] { } };
RunStaticMethod(t, "Main", p);
Console.WriteLine("Pippo");
Console.ReadLine();
}
public static object RunStaticMethod(System.Type t, string strMethod,
object[] aobjParams)
{
BindingFlags eFlags =
BindingFlags.Static | BindingFlags.Public |
BindingFlags.NonPublic;
return RunMethod(t, strMethod,
null, aobjParams, eFlags);
}
private static object RunMethod(System.Type t, string
strMethod, object objInstance, object[] aobjParams, BindingFlags eFlags)
{
MethodInfo m;
try
{
m = t.GetMethod(strMethod, eFlags);
if (m == null)
{
throw new ArgumentException("Non esiste un metodo'" +
strMethod + "' per il tipo '" + t.ToString() + "'.");
}
//Appena viene richiamata questa riga l'applicazione parte ma il controllo si trasferisce su questa applicazione. In debug ad esempio non riesco ad andare oltre questa riga..
object objRet = m.Invoke(objInstance, aobjParams);
return null;
}
catch
{
throw;
}
}