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