C# .NET AppDomains
Create a single instance of an application domain.
/* Dirt simple usage:
* 1. AppDomain.Create
* 2. AppDomain.SetData
* 3. AppDomain.DoCallBack
* 4. AppDomain.Unload
*/
namespace AppDomains
{
class Program
{
static void Main(string[] args)
{
MySerializedData serialData = new MySerializedData();
//Create domain and assign a name. The spawned domain can read it's own name.
System.AppDomain domain = System.AppDomain.CreateDomain("MY NEW DOMAIN");
//SetData applies a dictionary like Key, Value pairs to the domain.
domain.SetData("MyDataObj", serialData);
domain.SetData("stringData", "Hi there.");
domain.SetData("intData", 999);
//Invoke, or start, the STATIC method via callback
domain.DoCallBack(MyDomainCallback);
//clean up
System.AppDomain.Unload(domain);
System.Console.ReadLine();
}
//Static Callback method for AppDomain.DoCallBack
public static void MyDomainCallback()
{
//Get current domain
System.AppDomain domain = System.AppDomain.CurrentDomain;
string name = domain.FriendlyName;
string threadID = System.Threading.Thread.CurrentThread.ManagedThreadId.ToString();
//Get my data passed via key value pairs
MySerializedData d = (MySerializedData)domain.GetData("MyDataObj");
string stringData = (string)domain.GetData("stringData");
int intData = (int)domain.GetData("intData");
//Display in consoles
System.Console.WriteLine("MyData={{{0},{1},'{2}'}}, stringData='{3}', and intData={4} were passed to {5}, on thread ID: {6}",
d.a.ToString(),
d.b.ToString(),
d.d,
stringData,
intData.ToString(),
name,
threadID);
}
}
//Simple class used to pass data to the callback
[System.Serializable]
class MySerializedData
{
public int a = 3, b = 5;
public string d = "xxx";
}
}
David Gregory Medina
Post created by: David Gregory Medina
Leave a Reply