Si j'ai le thread A qui est le thread d'application principal et un thread secondaire. Comment puis-je vérifier si une fonction est appelée dans le thread B?Comment puis-je vérifier si une fonction est appelée sur un thread particulier?
Fondamentalement, je suis en train de mettre en œuvre le code suivant snippit:
public void ensureRunningOnCorrectThread()
{
if(function is being called within ThreadB)
{
performIO()
}
else
{
// call performIO so that it is called (invoked?) on ThreadB
}
}
Est-il possible d'effectuer cette fonctionnalité dans C# ou est-il une meilleure façon de voir le problème?
EDIT 1
J'ai remarqué ce qui suit dans la documentation MSDN, mais Im un dit douteux quant à savoir si ou non son une bonne chose à faire! :
// if function is being called within ThreadB
if(System.Threading.Thread.CurrentThread.Equals(ThreadB))
{
}
EDIT 2
Je me rends compte que Im regardant ce problème dans le mauvais sens (grâce aux réponses ci-dessous qui m'a aidé à voir cela) tout ce que je me soucie de est que l'IO ne se passe pas sur ThreadA. Cela signifie que cela peut se produire sur ThreadB ou tout autre thread, par ex. un BackgroundWorker. J'ai décidé que la création d'un nouveau BackgroundWorker dans la partie else de l'instruction f ci-dessus garantit que l'E/S est exécutée de manière non bloquante. Je ne suis pas entièrement sûr que c'est la meilleure solution à mon problème, mais il semble fonctionner!
J'imagine comparer juste l'ID est beaucoup plus efficace que la comparaison de l'objet entier! J'étudie aussi les façons dont je peux forcer à exécuter sur le thread ThreadB plutôt que sur le Thread actuel. Des idées? –
Jetez un oeil à ma réponse mise à jour ci-dessus-- est-ce que cela répond à ce que vous essayez de faire? –
TK, comparer l'Id n'est pas plus efficace que de comparer 2 objets, mais il est plus fiable ici. –