我想創建一個鉤子來監視鼠標光標的當前位置。沒有什麼重要的,我只需要在界面設計中計算一些像素,並且想要學習如何創建一個鉤子,所以我決定採取一種艱難的方式,而不是一種理智的方式。針對Windows API調用的AppDomain.GetCurrentThreadID與Thread.ManagedThreadID?
其聲明如下功能我發現示例代碼:
<DllImport("User32.dll", CharSet:=CharSet.Auto, _
CallingConvention:=CallingConvention.StdCall)> _
Public Overloads Shared Function SetWindowsHookEx _
(ByVal idHook As Integer, ByVal HookProc As CallBack, _
ByVal hInstance As IntPtr, ByVal wParam As Integer) As Integer
End Function
當函數被調用時,下面的代碼被用於:
hHook = SetWindowsHookEx(WH_MOUSE, _
hookproc, _
IntPtr.Zero, _
AppDomain.GetCurrentThreadId())
但Appdomain.GetCurrentThreadID生成警告: ''Public Shared Function GetCurrentThreadId()As Integer'已過時:'AppDomain.GetCurrentThreadId已被棄用,因爲當託管線程在光纖上運行時(也就是輕量級線程),它不會提供穩定的Id。日閱讀,使用Thread上的ManagedThreadId屬性。「
我試過使用ManagedThreadID,但那不起作用。返回的線程ID似乎是線程的邏輯線程ID,因爲它在.net運行時運行,而不是Win32線程標識符。
調用函數ith AppDomain.GetCurrentThreadID的作品,但我真的想爲我的線程有一個「穩定的標識符」。
有人可以向我解釋在這種情況下是否可以使用ManagedThreadID(我不假),如果沒有,我需要避免的事情,以阻止AppDomain.CurrentThreadID變得「不穩定」?
Cheers
對於是否能夠找到解決此問題的解決方法感到好奇? – amadib 2010-10-28 19:34:00
不是真的,沒有。我基本上只是用JaredPar的話來說,threadID會相當穩定,在測試過程中使用它,然後改變界面以對OnMouseMove事件做出反應,而不是最終部署。我原本沒有這樣做,因爲它意味着通過整個控制鏈傳遞事件,通常只是屁股疼痛。然而,它比上述方法更可靠,在整個測試過程中只失敗一次或兩次,但確實失敗了。 – Frosty840 2010-10-29 07:40:21