如何创建独立于模态 windows 的弹出窗口 window(.NET Windows 表单)
How to create a pop-up window that's independent of modal windows (.NET Windows Forms)
我正在尝试在我的 Windows Forms 应用程序中实现 'step-by-step guide' 功能。这些指南只是对如何执行常见任务的分步说明。我打算让用户在阅读指南时按照说明进行操作。因此,显示模态对话框的 window 需要 可访问 。
这可能吗?如果可以,我该怎么做?
显示模式时,您无法与同一 UI 线程中的任何其他 windows 交互。在 C# 中的同一进程中 运行 两个不同的 UI 线程是可能的(但可能不是世界上最好的主意)——但是您必须非常小心以保持稳定。在主线程中,运行 您的正常模态形式。在辅助线程中,您可以同时 运行 一个 non-modal 表单——只需在该线程中保留一个专用的 windows 消息泵 运行ning 直到您完成UI,然后关闭消息泵并退出线程。
感谢 andLabs、Tim 和 IInspectable 为我提供了解决问题所需的信息。以下是我需要的:
Thread myFormThread = new Thread(delegate()
{
Application.Run(new MyForm());
});
myFormThread.SetApartmentState(ApartmentState.STA);
myFormThread.Start();
它工作正常。显然,如果您需要从主窗体的事件处理程序访问 myForm 上的控件,则需要小心使用 myForm.BeginInvoke。您还需要帮助用户管理对表单的访问,因为它可能会落后于其他 windows.
我正在尝试在我的 Windows Forms 应用程序中实现 'step-by-step guide' 功能。这些指南只是对如何执行常见任务的分步说明。我打算让用户在阅读指南时按照说明进行操作。因此,显示模态对话框的 window 需要 可访问 。
这可能吗?如果可以,我该怎么做?
显示模式时,您无法与同一 UI 线程中的任何其他 windows 交互。在 C# 中的同一进程中 运行 两个不同的 UI 线程是可能的(但可能不是世界上最好的主意)——但是您必须非常小心以保持稳定。在主线程中,运行 您的正常模态形式。在辅助线程中,您可以同时 运行 一个 non-modal 表单——只需在该线程中保留一个专用的 windows 消息泵 运行ning 直到您完成UI,然后关闭消息泵并退出线程。
感谢 andLabs、Tim 和 IInspectable 为我提供了解决问题所需的信息。以下是我需要的:
Thread myFormThread = new Thread(delegate()
{
Application.Run(new MyForm());
});
myFormThread.SetApartmentState(ApartmentState.STA);
myFormThread.Start();
它工作正常。显然,如果您需要从主窗体的事件处理程序访问 myForm 上的控件,则需要小心使用 myForm.BeginInvoke。您还需要帮助用户管理对表单的访问,因为它可能会落后于其他 windows.