2 番目の UI スレッドでウィンドウを起動し、自由にシャットダウンできるようにする必要があります。
これは私の現在のコードです:
/// <summary>Show or hide the simulation status window on its own thread.</summary>
private void toggleSimulationStatusWindow(bool show)
{
if (show)
{
if (statusMonitorThread != null) return;
statusMonitorThread = new System.Threading.Thread(delegate()
{
Application.Run(new AnalysisStatusWindow(ExcelApi.analyisStatusMonitor));
});
statusMonitorThread.Start();
}
else
{
if (statusMonitorThread != null)
statusMonitorThread.Abort();
statusMonitorThread = null;
}
}
AnalysisStatusWindow
かなり基本的なSystem.Windows.Forms.Form
上記のコードは新しい UI スレッドを正常に作成してAbort
いますが、スレッドへの要求は無視されます。その結果、上記の関数を複数回切り替えると、新しいウィンドウが開くだけです。これらはすべて独自のスレッド上にあり、完全に機能します。
このスレッドにメッセージを渡して適切にシャットダウンする方法はありますか? Abort()
それに失敗した場合、2 番目の UI スレッドを確実に強制終了する方法はありますか?
の代わりにnew Form().Show()
andを使用してみましたが、シャットダウンするのは簡単ではありません。.ShowDialog()
Application.Run(new Form())
別の UI スレッドの必要性を疑問視する人がいる場合、このコードは Excel アドインに存在し、特定のセルの計算中に Excel UI がブロックされるという事実を制御できません。そのため、実行時間の長いカスタム フォーミュラが実行されるときは、この 2 番目の UI スレッドで進行状況の更新を表示する必要があります。