Семантика нечетной блокировки .Net снова вызывает у меня проблемы.
Я запускаю поток, дочерний поток по очереди запускает форму. Родительский поток должен дождаться создания формы.
Моей первой попыткой было использование Monitor для просмотра переменной Form:
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);
}
... Это исключение. Monitor.Enter () завершается ошибкой, поскольку Form == null.
Я мог бы очень легко создать фиктивное целое число или что-то еще (я действительно думаю, что смогу изменить переменную FormThread), но мне было интересно, есть ли более элегантное решение.