.Nets seltsame Sperrensemantik nervt mich wieder.C#: Warte bis die Variable nicht null wird
Ich starte einen Thread, der Kind-Thread startet abwechselnd ein Formular. Der übergeordnete Thread sollte warten, bis das Formular erstellt wird.
Mein erster Versuch war ein Monitor zu verwenden, um die Formularvariablen zu sehen:
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);
}
... Dies löst eine Ausnahme. Monitor.Enter() schlägt fehl, seit Form == null.
Ich könnte sehr einfach eine Dummy-Integer oder etwas erstellen (ich glaube, ich werde die FormThread-Variable canabalize), aber ich fragte mich, ob es eine elegantere Lösung gab.
Dies scheint um genau das Primitive zu sein, nach dem ich gesucht habe. Ich habe es vermisst, als ich die Liste der Sachen in System.Threading gelesen habe, anscheinend ... meine Augäpfel suchten nach "Event" oder so. – Thanatos