2

Provider と呼ばれる .NET Class Library Assembly に取り組んでいます。プロバイダーは、リフレクションを介してホスト アプリケーションによって読み込まれます。プロバイダーは以下を実装します。

interface ISomeService 
{
    ShowPopup(PopupParms params);
}

Provider の機能の 1 つは、WinForms フォームを表示することです。プロバイダーがホスト アプリケーションをブロックしないように、別のスレッドで実行する必要があります。WinForm を起動するには、別のスレッドを作成し、そこから次のように呼び出します。

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 を設定するタイマーを使用していくつかのテストを行いましたが、良い解決策とは思えません。

4

0 に答える 0