1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
using System;
using System.Threading;
/*
This test checks if the AddDomain::DomainUnload event is processed with
a fully working domain. In special if the threadpool remains operational.
*/
class Driver
{
static void UnloadHook (object obj, EventArgs args)
{
ManualResetEvent evt = new ManualResetEvent (false);
Console.WriteLine ("On the UnloadHook");
if (Environment.HasShutdownStarted)
throw new Exception ("Environment.HasShutdownStarted must not be true");
Action<int> f = (int x) => {
evt.WaitOne (1000);
evt.Set ();
};
f.BeginInvoke (1, null, null);
evt.WaitOne ();
Console.WriteLine ("Hook done");
}
static void OtherDomain()
{
AppDomain app = AppDomain.CurrentDomain;
Console.WriteLine ("Now I'm on {0}", app);
app.DomainUnload += Driver.UnloadHook;
}
static int Main ()
{
AppDomain app = AppDomain.CreateDomain ("Foo");
Console.WriteLine ("I'm on {0}", AppDomain.CurrentDomain);
app.DoCallBack (Driver.OtherDomain );
Thread.Sleep (1);
AppDomain.Unload (app);
Thread.Sleep (1);
return 0;
}
}
|