Avvio di una starsta in c #
Domanda
Sono ancora una specie di nuovo a c #, e soprattutto infilare in c #. Sto cercando di avviare una funzione che richiede un singolo appartamento filettato ( stathread )
Ma non sono in grado di compilare il seguente codice:
La funzione sembra segue in una classe separata chiamata MyClass
:
internal static string DoX(string n, string p)
{
// does some work here that requires STAThread
}
.
Ho provato l'attributo [Stathread] in cima alla funzione ma non funziona.
Quindi sto cercando di creare un nuovo thread come segue:
Thread t = new Thread(new ThreadStart(MyClass.DoX));
.
Ma questo non si compilerà (il metodo del miglior sovraccarico non ha errore di argomenti non validi).Tuttavia, l'esempio online è molto simile (esempio qui) Cosa sto facendo male e come posso semplicemente fare una funzione eseguita in un nuovo filo STA?
Grazie
Soluzione
Thread thread = new Thread(() => MyClass.DoX("abc", "def"));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
.
Se è necessario il valore, è possibile "catturare" in una variabile, ma si noti che la variabile non avrà il valore fino alla fine dell'altro filo:
int retVal = 0;
Thread thread = new Thread(() => {
retVal = MyClass.DoX("abc", "def");
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
.
o forse più semplice:
Thread thread = new Thread(() => {
int retVal = MyClass.DoX("abc", "def");
// do something with retVal
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
.