La sémantique de verrouillage inhabituelle de .Net me perturbe à nouveau.C#: Attendre que la variable devienne non-nulle
Je lance un thread, le thread enfant à son tour commence un formulaire. Le thread parent doit attendre que le formulaire soit créé.
Ma première tentative a été d'utiliser un moniteur pour regarder la variable Forme:
private void OpenForm()
{
if (FormThread == null)
{
Monitor.Enter(Form);
FormThread = new Thread(FormStub);
FormThread.SetApartmentState(ApartmentState.STA);
FormThread.Start();
Monitor.Wait(Form);
Monitor.Exit(Form);
}
}
private void FormStub()
{
Form = new ConnectorForm();
Monitor.Enter(Form);
Monitor.PulseAll(Form);
Monitor.Exit(Form);
Application.Run(Form);
}
... Ce lève une exception. Monitor.Enter() échoue, puisque Form == null.
Je pourrais très facilement créer un nombre entier fictif ou quelque chose (je pense réellement que je vais canabaliser la variable FormThread), mais je me demandais s'il y avait une solution plus élégante.
Cela semble être exactement le primitif que je cherchais. Je l'ai manqué quand j'ai lu la liste des choses dans System.Threading, apparemment ... mes globes oculaires cherchaient "Event" ou quelque chose comme ça. – Thanatos