In questo nuovo esempio ci servono due soluzione che non sono in referenza fra loro,
se non per la modalità con cui la prima richiama gli altri.
Lo scopo è quindi di creare una console application che richiama un secondo applicativo.
Nel primo caso utilizziamo appDomain e nel secondo caso utilizziamo processInfo.
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace AppDomainTester
{
class Program
{
public static AppDomain currentAppDomain = null;
static void Main(string[] args)
{
Thread t1 = new Thread(GoForIt);
t1.Start();
ProcessStartInfo psi = new
ProcessStartInfo(@"AppDomainTester.External.exe");
Process p = Process.Start(psi);
p.WaitForExit();
Console.ReadLine();
}
public static void GoForIt()
{
currentAppDomain = AppDomain.CreateDomain("c#TestDomain");
currentAppDomain.ExecuteAssembly(@"AppDomainTester.External.exe");
}
}
}
E questo è il codice della console application.
Mentre per l'altra implementata come window form application.
Il form ( banale in tutto e per tutto ) contiene una property Grid in modo da poter
mostrare le differenze fra le due modalità di caricamento.
Ed il sorgente è quindi il seguente.
in program:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
}
e nella load del form...
public partial class frmMain : Form
{
public frmMain()
{
InitializeComponent();
pgMain.SelectedObject = AppDomain.CurrentDomain;
}
}
Quanto emerge appare decisamente interessante.
Il form lanciato con appDoman naturalmente propone in appDomain.current una serei di informazioni molto interessanti.
Nessun commento:
Posta un commento