我有一個類在指定時間後引發事件(它在內部使用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