如何创建一个独立于模态窗口的弹出窗口(.NET Windows窗体)

时间:2017-02-20 03:03:30

标签: c# winforms winapi popupwindow

我正在尝试实施一步一步的指南'我的Windows窗体应用程序中的功能。这些指南只是如何执行常见任务的逐步说明。我打算让用户在阅读指南时完成说明。因此,当显示模态对话框时,他们显示的窗口需要

这可能吗?如果是这样,我该怎么做?

2 个答案:

答案 0 :(得分:0)

显示模式时,您无法与同一UI线程中的任何其他窗口进行交互。在C#中的同一进程中运行两个不同的UI线程是可能的(但可能不是世界上最好的想法) - 但是你必须非常小心地保持稳定。在主线程中,运行普通的模态表单。在辅助线程中,您可以同时运行非模态窗体 - 只需在该线程中运行专用的Windows消息泵,直到完成UI,然后关闭消息泵并退出线程。

答案 1 :(得分:0)

感谢andLabs,Tim和IInspectable给我提供解决问题所需的信息。以下是我需要的:

Thread myFormThread = new Thread(delegate()
{
    Application.Run(new MyForm());
});
myFormThread.SetApartmentState(ApartmentState.STA);
myFormThread.Start();

工作正常。显然,如果需要从主窗体的事件处理程序访问myForm上的控件,则需要小心使用myForm.BeginInvoke。您还需要帮助用户管理对表单的访问,因为它可能会丢失在其他窗口后面。