我正在动态实例化一个表单。在创建句柄之前,我无法与表单上的组件(例如 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 对我来说听起来并不吸引人。如果你不同意我的话。没关系。我只是怀疑我目前的解决方案不是最优雅的。