Quelqu'un peut-il me dire ce qui ne va pas avec le code suivant ? Idéalement, il devrait d'abord démarrer un thread et ensuite attendre l'événement set. Au lieu de cela, il ne démarre pas le fil et reste bloqué sur WaitOne().
Je suis curieux de savoir ce qui est arrivé à ce fil et pourquoi ?
class Program
{
static void Main(string[] args)
{
Testing t = Testing.Instance;
Console.Read();
}
}
class Testing
{
private static AutoResetEvent evt = new AutoResetEvent(false);
public static Testing Instance = new Testing();
private Testing()
{
Create();
evt.WaitOne();
Console.WriteLine("out");
}
private void Create()
{
Console.WriteLine("Starting thread");
new Thread(Print).Start();
}
private void Print()
{
Console.WriteLine("started");
evt.Set();
}
}
EDIT : Jusqu'à présent, la description fournie par @BrokenGlass a du sens. Mais en changeant le code par le code suivant, un autre thread peut accéder aux méthodes d'instance sans que le constructeur soit terminé (suggéré par @NicoSchertler).
private static Testing _Instance;
public static Testing Instance
{
get
{
if (_Instance == null)
_Instance = new Testing();
return _Instance;
}
}