任何人都可以解釋爲什麼下面的代碼在一些Win7的PC上工作,但在一些我得到一個MissingMethodException和Timer.Elapsed事件永遠不會被調用。正確的方式調用Dispatcher.Invoke
Private Sub _timer2_Elapsed(ByVal sender As Object, ByVal e As System.EventArgs) Handles _timer2.Elapsed
_timer2.Enabled = False
Dispatcher.Invoke(Sub()
HandleSingleKeyPress(-1)
End Sub)
End Sub
經過一番研究,我發現下面的代碼的效果要好得多: -
Public Delegate Sub InvokedSubDelegate()
Private Sub _timer2_Elapsed(ByVal sender As Object, ByVal e As System.EventArgs) Handles _timer2.Elapsed
_timer2.Enabled = False
Dispatcher.Invoke(New InvokedSubDelegate(Sub()
HandleSingleKeyPress(-1)
End Sub))
End Sub
不知道爲什麼第一種方法只適用,但有時希望該解決方案能夠幫助別人有類似問題。
Jerry
我最初使用了dispatcher.timer,但是我試圖通過測量點擊間隔來檢測雙擊,這是當然的。在閱讀其他帖子中的評論之後,我也嘗試了threading.timer。我仍然有同樣的例外。 – Jerry
使用System.Timers.Timer來測量點擊間隔是毫無意義的。你當然使用鼠標事件,它告訴你鼠標被點擊。還有一個準確的間隔計時器,可以查看Stopwatch需要多長時間。在你的問題中陳述你的目標非常重要。 –
我的目標是理解爲什麼在代理中包裝llambda函數會造成巨大差異,但僅限於某些系統。我接受我可以使用StopWatch並避免使用Invoke,但這只是解決問題。我不認爲這與我使用計時器有任何關係。我也有這樣的代碼: - – Jerry