Estoy intentando crear un gancho para controlar la posición actual del cursor del mouse. Nada importante, solo necesito contar algunos píxeles durante el diseño de la interfaz y quería aprender a crear un gancho, así que decidí ir por un camino difícil en lugar de hacerlo de una manera sensata.AppDomain.GetCurrentThreadID vs Thread.ManagedThreadID para llamadas a la API de Windows?
que he encontrado código de ejemplo que declara la siguiente función:
<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
Cuando la función es llamada, se utiliza el siguiente código:
hHook = SetWindowsHookEx(WH_MOUSE, _
hookproc, _
IntPtr.Zero, _
AppDomain.GetCurrentThreadId())
Pero Appdomain.GetCurrentThreadID genera la advertencia: "'Public Shared Function GetCurrentThreadId() As Integer' está obsoleto: 'AppDomain.GetCurrentThreadId ha quedado obsoleto porque no proporciona un Id estable cuando los hilos administrados se ejecutan en fibras (también conocidos como subprocesos ligeros). Para obtener un identificador estable para un manejado th leer, use la propiedad ManagedThreadId en el hilo. "
He intentado usar ManagedThreadID, pero eso no funciona. El Id. Del subproceso devuelto parece ser el Id. De subproceso lógico del subproceso, ya que se ejecuta en el tiempo de ejecución .net, en lugar del identificador de subproceso Win32.
Llamar a la función AppDomain.GetCurrentThreadID funciona, pero realmente me gustaría tener un "identificador estable" para mi hilo.
¿Puede alguien explicarme si es posible usar ManagedThreadID en este contexto (supongo que no) y, si no, las cosas que debo evitar para evitar que AppDomain.CurrentThreadID se vuelva "inestable"?
Saludos
¿Te preocupa si pudiste encontrar una solución para este problema? – amadib
No realmente, no. Básicamente, tomé la palabra de JaredPar para que el threadID fuera razonablemente estable, lo usé durante las pruebas y luego cambié la interfaz para reaccionar a los eventos de OnMouseMove en lugar de la implementación final. No lo hice originalmente porque significa pasar eventos a través de toda una cadena de controles y generalmente es solo un dolor en el culo. Sin embargo, es más confiable que el método anterior, que solo falló una o dos veces durante la totalidad de la prueba, pero falló. – Frosty840