我需要能够在第二个 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()
真的杀死我的第二个 UI 线程?
我尝试过使用new Form().Show()
and.ShowDialog()
而不是Application.Run(new Form())
,但关闭它们并不容易。
如果有人质疑是否需要单独的 UI 线程,则此代码存在于 Excel 加载项中,我无法控制在给定单元格的计算正在进行时 Excel UI 阻塞的事实。因此,当执行长时间运行的自定义公式时,我需要第二个 UI 线程来显示进度更新。