我正在开发名为Provider的.NET类库程序集。提供者由主机应用程序通过Reflection加载。提供者实施:
interface ISomeService
{
ShowPopup(PopupParms params);
}
提供商的一项功能是显示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。结果是在主机启动时的某些情况
ISomeService.ShowPopup();
表单以最小化状态显示,用户可能会错过它。当然,TopMost属性设置为true。我用计时器进行了一些测试,每隔几秒就设置一次WindowState = FormWindowState.Normal,但它看起来不是很好的解决方案。