2

我正在开发名为 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,但它看起来并不是一个好的解决方案。

4

0 回答 0