我有一个类在指定时间后引发事件(它在内部使用System.Timers.Timer
)。在我的测试代码中,我创建了一个Stopwatch
,这是我在创建课程之前开始的,并设置了事件的回调以停止Stopwatch
。然后,我封锁,直到Not Stopwatch.IsRunning
。很简单,对吧?如何安全地阻止.NET线程
我原来的阻塞代码为
While Stopwatch.IsRunning
End While
,但我发现,有一个空的,而这样的循环决不允许我的回调火!只要我把代码调试到while循环,它的工作!:
Dim lastSecond As Integer = 0
While sw.IsRunning
If (Date.Now.Second > lastSecond) Then
lastSecond = Date.Now.Second
Console.WriteLine("blocking...")
End If
End While
是什么原因造成这种奇怪的行为,更重要的是,有什么我可以把我的封锁区间的最简单的代码,将允许事件火?
您使用的是什么版本的.NET? – Eilistraee
4.0但我可以相对容易切换到 –
然后不要忘记任务,尤其是等待Task.Yield(),它允许UI线程的消息泵在UI线程上调用时运行,或等待任务。延迟(延迟),暂停执行而不保持当前线程像睡眠一样被阻塞。我不会详细说明,因为你的问题的真正答案是真正的汉斯。 – Eilistraee