我有一个向导界面(因此带有属性页的属性表)。
在其中一个页面上,我正在运行一个后台计时器,以不断检测给定的外部事物是否正确(好吧,我编制了一个已连接的可见USB安全加密狗的列表)。
但是当此页面显示模式对话框时-例如一个MessageBox,我想暂停/忽略计时器通知。
我可以通过简单地终止计时器-运行消息框-然后重新启动计时器来做到这一点。这可以完美地工作,但是要求所有对MessageBox的调用都必须记住要这样做。没什么大不了的,但是很优雅。
现在,我还可以包装MessageBox,以便使用帮助程序包装器功能为调用者执行暂停/恢复计时器。这是一个正确的想法-但仍然需要维护编码人员始终记住调用我的包装器函数,这对于可能需要运行的其他模式对话框(以及还需要使暂停/恢复计时器跳动)的效果不佳执行。
我认为理想的是让计时器保持运行状态,但是让计时器处理程序本身检查我们当前是否正在运行模式对话框,如果是这样,则只需忽略计时器通知(计时器将继续在其中弹出通知)片刻-最终我们将使用模式对话框[消息框]完成,然后我们可以继续处理计时器通知。)
但是我看不到的是一种询问“我现在正在运行模式对话框吗?”的机制。
从页面计时器处理程序的POV中-它不知道模式对话框是否在进行中。 IsWindowEnabled()
返回true-因此至少标准窗口MessageBox()
不会禁用父窗口...这使我对它如何锁定其父窗口上的按钮单击感到困惑(我的想法是这几天过筛-也许答案很明显,我才刚老;))
无论如何-我想念什么? “是否正在该线程中运行模式对话框/作为该窗口的子代?”的简单测试是什么?
感谢您可能需要提供的任何温柔线索
答案 0 :(得分:0)
因此,我是从属性页的上下文询问describe('MyComponent', () => {
let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [
{ provide: LOCATION_TOKEN, useValue: window.history }
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
describe(('goBack()'), () => {
it('should be clicked', inject([LOCATION_TOKEN], (_loc: Location) => {
spyOn(_loc, 'back');
component.goBack();
expect(_loc.back).toHaveBeenCalledTimes(1);
}));
});
});
的,该属性页是向导对话框中的子窗口。
在运行模式对话框时,将其更改为IsWindowEnabled()
会返回GetParent()->IsWindowEnabled()
。