.Netの奇妙なロックのセマンティクスが私を再び悩ませています。C#:変数がnull以外になるのを待ちます。
スレッドを起動すると、子スレッドが順番にフォームを開始します。親スレッドは、フォームが作成されるまで待つ必要があります。これは、例外をスロー...
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);
}
:
私の最初の試みは、フォーム変数を監視するモニタを使用することでした。 Form == nullなので、Monitor.Enter()は失敗します。
私は非常に簡単にダミーの整数や何かを作成することができます(私は実際にFormThread変数を変更できます)と思っていますが、より洗練されたソリューションがあるかどうかは疑問でした。
まさに私が探していたプリミティブなのです。私はSystem.Threadingのもののリストを読んだときにそれを見逃した、明らかに...私の眼球は "イベント"か何かを探していた。 – Thanatos