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



Rispondi quotando