Questione : Multifilo in C# .NET

Sono relativamente nuovo a sviluppo di software in .NET e sto volendo utilizzare multifilo nella mia applicazione per impedire il GUI il congelamento mentre un metodo con un metodo lungo di caso di domanda executes.
My di DB regola un campo di caso che non dovrebbe riferirsi fino a che il metodo di caso non sia completo.  Come posso fare questo? il

Attached è un certo codice a demostrate che cosa sto facendo: il



I ha arrivato alla sostituzione:

myObject1.queryRecent ();

With: secondThread del

Thread = nuovo filetto (nuovo ThreadStart (myObject1.queryRecent));
secondThread.Start ();

But ovviamente, label1.Text = myObject1.recentString;  è eseguito mentre il metodo è ancora running.

How può io impedire questa linea che esegue fino a che il metodo queryRecent non abbia rifinito l'esecuzione?

Thanks in anticipo,
Matt
class= > " libero " del
> " del codeSnippet " del class= del
class= " lineNumbers " del
class= del
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
codice categoria parziale >public notpretty Form1 " del class= " del id= " codeSnippet867955 del
           
class= del

Risposta : Multifilo in C# .NET

Potete usare un BackgroundWorker () come questo:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
    codice categoria parziale pubblico Form1: Forma
    {

        bgw riservato = posizione di segnale minimo di System.ComponentModel.BackgroundWorker;
        Class1 riservato myObject1 = nuovo Class1 ();

        pubblico Form1 ()
        {
            InitializeComponent ();
        }

        vuoto riservato textBox1_KeyPress (mittente dell'oggetto, KeyPressEventArgs e)
        {
            se (posizione di segnale minimo del == del bgw)
            {
                bgw = nuovo BackgroundWorker ();
                bgw.DoWork += nuovo DoWorkEventHandler (bgw_DoWork);
                bgw.RunWorkerCompleted += nuovo RunWorkerCompletedEventHandler (bgw_RunWorkerCompleted);
            }

            se (&& del == 13 di e.KeyChar! bgw.IsBusy)
            {
                textBox1.Enabled = falso;
                myObject1.myString = textBox1.Text;
                bgw.RunWorkerAsync ();
            }
        }

        bgw_DoWork vuoto (mittente dell'oggetto, DoWorkEventArgs e)
        {
            myObject1.queryRecent ();
        }

        il vuoto bgw_RunWorkerCompleted (mittente dell'oggetto, RunWorkerCompletedEventArgs e)
        {
            label1.Text = myObject1.recentString;
            textBox1.Enabled = allineano;
        }

    }
Altre soluzioni  
 
programming4us programming4us