giovedì 6 ottobre 2011

AppDomain Samples C#

Nell'ottica di comprendere gli effetti di AppDomain su una applicazione ho esteso l'esempio di qualche tempo fa.

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: