我正在开发名为 Provider 的 .NET 类库程序集。提供程序由主机应用程序通过反射加载。提供者实现:
interface ISomeService
{
ShowPopup(PopupParms params);
}
Provider 的功能之一是显示 WinForms 表单。它必须在单独的线程中完成,这样 Provider 才不会阻塞 Host 应用程序。要启动 WinForm,我创建了另一个 Thread 并从中调用:
Application.Run(ApplicationContext)
ApplicationContext 类在哪里:
public class PopupFormContext : ApplicationContext
{
public PopupFormContext(PopupParameters param, ILogger logger)
{
var popupForm = new PopupForm(param);
popupForm.Closed += (sender, args) =>
{
logger.WriteInfo("PopupForm closed.");
ExitThread();
};
popupForm.ShowDialog(); //Tested also with Show();
}
}
}
一切似乎都正常,但我不能强制弹出窗口为 TopMost。结果是在某些情况下,当 Host 启动时
ISomeService.ShowPopup();
表单以最小化状态显示,用户可能会错过它。当然 TopMost 属性设置为 true。我已经使用计时器进行了一些测试,每隔几秒钟设置一次 WindowState=FormWindowState.Normal,但它看起来并不是一个好的解决方案。