来自dll库的TopMost表单

时间:2013-05-27 13:14:22

标签: c# winforms

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

0 个答案:

没有答案