Je sais qu'il existe d'autres messages qui indiquent que vous pouvez créer un contrôle, puis vérifier la propriété InvokeRequired
pour voir si le thread actuel est le thread principal ou non.Comment savoir si un thread est le thread principal en C#
Le problème est que vous n'avez aucun moyen de savoir si ce contrôle lui-même a été créé sur le thread principal.
J'utilise le code suivant pour savoir si un fil est le fil conducteur (le fil qui a commencé le processus):
if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA ||
Thread.CurrentThread.ManagedThreadId != 1 ||
Thread.CurrentThread.IsBackground || Thread.CurrentThread.IsThreadPoolThread)
{
// not the main thread
}
Est-ce que quelqu'un sait une meilleure façon? Il semble que cette façon de procéder pourrait être sujette à des erreurs ou casser des versions futures de l'exécution.
Que voulez-vous dire par «fil principal»? Et qu'est-ce que vous en avez besoin? –
Le thread sur lequel "public static void Main" est lancé.J'ai besoin de savoir parce que j'utilise C++/COM interop et le code sous-jacent exige qu'il soit invoqué uniquement à partir du thread à partir duquel il a été initialisé (le thread principal dans mon cas) – jjxtra