Pytanie : .net w C# .NET

I być stosunkowo nowy oprogramowanie rozwój w .NET, i I chcieć multithreading w mój zastosowanie the GUI od marznięcie podczas gdy metoda z długi DB zapytanie executes.
My przykład metoda ustawiać przykład pole che musieć odnosić się until the przykład metoda być zupełny.  Dlaczego móc I to?

Attached być niektóre kod demostrate i I robić:



I dostać tak daleko jak:

myObject1.queryRecent ();

With:

Thread secondThread = nowy Nić (nowy ThreadStart (myObject1.queryRecent));
secondThread.Start ();

But oczywiście, label1.Text = myObject1.recentString;  wykonywać podczas gdy the metoda być wciąż running.

How móc I ten kreskowy until the queryRecent metoda kończyć?

Thanks w postęp,
Matt
(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:
public częściowy klasa Form1: Forma
{
   Class1 myObject1 = nowy Class1 ();
   społeczeństwo Form1 ()
   {
       InitializeComponent ();
   }

   intymny pustka textBox1_KeyPress (przedmiot nadawca, KeyPressEventArgs e)
   {
       jeżeli (e.KeyChar == 13)
       {
           myObject1.myString = textBox1.Text;

           //Run ten metoda w drugi nić, więc the GUI marznąć podczas gdy ono wykonywać:
           myObject1.queryRecent ();

           //Don ' t wykonywać until myObject1.queryRecent być zupełny
           label1.Text = myObject1.recentString;
}}}


klasowy Class1
{
    społeczeństwo sznurek myString = "inicjał myString";     //set zewnętrznie
    społeczeństwo sznurek recentString = "inicjał recentString";	//set queryString
    społeczeństwo sznurek allString = "inicjał allString";    //set queryAll

    jawny kawitacyjny queryRecent ()
    {
        //simulate długi baza danych zapytanie:
        Thread.Sleep (3000);  
        recentString = myString + ". Nieco więcej tekst";
    }

    jawny kawitacyjny queryAll ()
    {
         //simulate długi baza danych zapytanie:
         Thread.Sleep (5000); 
         allString = myString + ". Niektóre inny tekst";
    } 
}

Odpowiedź : .net w C# .NET

Ty móc BackgroundWorker () jak móc:
(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:
    jawny częściowy klasa Form1: Forma
    {

        intymny System.ComponentModel.BackgroundWorker bgw = null;
        intymny Class1 myObject1 = nowy Class1 ();

        społeczeństwo Form1 ()
        {
            InitializeComponent ();
        }

        intymny pustka textBox1_KeyPress (przedmiot nadawca, KeyPressEventArgs e)
        {
            jeżeli (bgw == null)
            {
                bgw = nowy BackgroundWorker ();
                bgw.DoWork += nowy DoWorkEventHandler (bgw_DoWork);
                bgw.RunWorkerCompleted += nowy RunWorkerCompletedEventHandler (bgw_RunWorkerCompleted);
            }

            jeżeli (e.KeyChar == 13 &&! bgw.IsBusy)
            {
                textBox1.Enabled = fałszywy;
                myObject1.myString = textBox1.Text;
                bgw.RunWorkerAsync ();
            }
        }

        kawitacyjny bgw_DoWork (przedmiot nadawca, DoWorkEventArgs e)
        {
            myObject1.queryRecent ();
        }

        pustka bgw_RunWorkerCompleted (przedmiot nadawca, RunWorkerCompletedEventArgs e)
        {
            label1.Text = myObject1.recentString;
            textBox1.Enabled = true;
        }

    }
Inne rozwiązania  
 
programming4us programming4us