Je suis toujours un peu nouveau pour C #, et surtout le filetage en C #. J'essaie de démarrer une fonction qui nécessite un seul appartement fileté ( Stathread )
Mais je ne suis pas capable de compiler le code suivant:
La fonction ressemble à une classe distincte appelée MyClass
:
internal static string DoX(string n, string p)
{
// does some work here that requires STAThread
}
J'ai essayé l'attribut [Stathread] en haut de la fonction mais cela ne fonctionne pas.
J'essaie donc de créer un nouveau fil comme suit:
Thread t = new Thread(new ThreadStart(MyClass.DoX));
mais cela ne compilera pas (la meilleure méthode surchargée a une erreur d'arguments non valide). Cependant, l'exemple en ligne est très similaire ((exemple ici) Qu'est-ce que je fais-je mal et comment puis-je simplement faire fonctionner une fonction dans un nouveau fil de STA?
Merci
Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Si vous avez besoin de la valeur, vous pouvez "capturer" qui redevient une variable, mais notez que la variable n'aura pas la valeur jusqu'à la fin de l'autre thread:
int retVal = 0;
Thread thread = new Thread(() => {
retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
ou peut-être plus simple:
Thread thread = new Thread(() => {
int retVal = MyClass.DoX("abc", "def");
// do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();