我在.Net4.0上使用C ++ CLI编写应用程序我有一个事件处理程序,可以在任何随机时间引发事件 该事件仅在特定时间范围内发生时才有用(或者它应该在一段时间内发生一次) 我需要检查事件是否在过去的时间间隔内被提出一次。如果它没有在特定的时间间隔内被提出,我将提出异常。
我试过像这样实现它:
然而,我发现它会产生误报。 Thios可能是因为事件被阻止还是什么?
有人知道更好的方法吗?我想知道是否有一些方法可以在没有外部计时器事件(或线程)的情况下执行它,因为它可能会中断其他线程。
提前致谢。
答案 0 :(得分:0)
不确定c ++ CLI的含义,但是当我在C#中测试异步事件时,我通常会这样做:
[Test]
public void CheckThatEventIsRaisedWithinTimeframe()
{
var eventRaised = new ManualResetEvent(false);
subject.SomeEvent += (s, e) => { eventRaised.Set(); };
// Do something which should have triggered the event
Assert.True(eventRaised.WaitOne(5000), "Event was not raised.");
}
WaitOne调用将阻塞,直到时间用完(在这种情况下为5秒),或者引发事件。在第一种情况下,WaitOne将返回false,在第二种情况下,它将返回true。
我认为你可以做类似的事情,例如:
var eventRaised = new AutoResetEvent(false);
subject.SomeEvent += (s, e) => { eventRaised.Set(); };
while(true)
{
var ok = eventRaised.WaitOne(5000);
if(!ok)
throw new Exception("Event was not raised for 5 seconds");
}
如果事件至少每5秒钟没有被提升,这应该继续运行并抛出异常。