フォームを動的にインスタンス化しています。ハンドルが作成されるまで、フォーム上のコンポーネント (TextBox など) と対話することはできません (それ以外の場合、例外がスローされます)。
現在、while ループを使用してスレッドをブロックしています。
public void OutputDesktopFrame(MessagingService service, DesktopFrame desktopFrame)
{
IRemoteDesktopView view = GetView(service);
view.UpdateFrame(desktopFrame);
}
private IRemoteDesktopView GetView(MessagingService service)
{
T view;
bool viewExists = _views.TryGetValue(service, out view);
if (viewExists == false)
{
view = CreateAndShowView(service);
}
return view;
}
private T CreateAndShowView(MessagingService service)
{
T remoteDesktopView = new T();
_views.Add(service, remoteDesktopView);
Thread pumpThread = new Thread(() => remoteDesktopView.ShowDialog());
pumpThread.Start();
while (remoteDesktopView.IsHandleCreated == false)
{
//Do not return until the handle has been created!
}
return remoteDesktopView;
}
私はこのメカニズムが好きではありません。エレガントなソリューションを探しています。
インターフェイスに対してコーディングしていることを考慮してください。ManualResetEvent などを使用することを考えましたが、インターフェイスを実装する各フォーム内で ManualResetEvent を実装して処理する必要があるのは魅力的ではありません。あなたが私に同意しない場合。それでいいです。現在のソリューションが最もエレガントではないのではないかと思うだけです。