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

È stato utile?

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();
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top