J'essaie de créer un crochet pour surveiller la position actuelle du curseur de la souris. Rien d'important, j'ai juste besoin de compter quelques pixels lors de la conception de l'interface et je voulais apprendre comment créer un crochet, alors j'ai décidé d'y aller à la dure plutôt que de manière saine.AppDomain.GetCurrentThreadID vs Thread.ManagedThreadID pour les appels d'API Windows?
J'ai trouvé un exemple de code qui déclare la fonction suivante:
<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
Lorsque la fonction est appelée, le code suivant est utilisé:
hHook = SetWindowsHookEx(WH_MOUSE, _
hookproc, _
IntPtr.Zero, _
AppDomain.GetCurrentThreadId())
Mais Appdomain.GetCurrentThreadID génère l'avertissement: '' Fonction publique partagée GetCurrentThreadId() As Integer 'est obsolète:' AppDomain.GetCurrentThreadId est obsolète car il ne fournit pas d'ID stable lorsque les threads gérés s'exécutent sur des fibres (également appelés threads légers). th read, utilisez la propriété ManagedThreadId sur Thread. "
J'ai essayé d'utiliser ManagedThreadID, mais cela ne fonctionne pas. L'ID de thread retourné semble être l'ID de thread logique du thread, car il s'exécute dans l'exécution .net, plutôt que l'identificateur de thread Win32.
Appel de la fonction avec AppDomain.GetCurrentThreadID fonctionne, mais j'aimerais vraiment avoir un "identifiant stable" pour mon thread. Est-ce que quelqu'un peut m'expliquer s'il est possible d'utiliser ManagedThreadID dans ce contexte (je suppose que non) et, sinon, les choses que je dois éviter afin d'empêcher que AppDomain.CurrentThreadID devienne "instable"?
Vive
Curieux de savoir si vous avez trouvé une solution de contournement pour ce problème? – amadib
Pas vraiment, non. J'ai fondamentalement juste pris le mot de JaredPar pour que le threadID soit raisonnablement stable, utilisé ceci pendant le test, et ai ensuite changé l'interface pour réagir aux événements OnMouseMove au lieu du déploiement final. Je ne l'ai pas fait à l'origine parce que cela signifie passer des événements à travers toute une chaîne de contrôles et est généralement juste une douleur dans le cul. Il est cependant plus fiable que la méthode ci-dessus, qui n'a échoué qu'une ou deux fois pendant toute la durée du test, mais a échoué. – Frosty840