Вопрос : Multithreading в C# .NET

Я относительно нов к разработке программного обеспечения в .NET, и я хочу использовать multithreading в моем применении для того чтобы предотвратить GUI от замерзать пока метод с длинним методом примера вопроса executes.
My DB устанавливает поле примера которое не должно быть снабжено ссылками до тех пор пока метод примера не быть закончен.  Как могу я сделать это?

Attached будет некоторое Кодий к demostrate я делаю:



I получило далеко как заменять ть:

myObject1.queryRecent ();

With: secondThread

Thread = новая резьба (новое ThreadStart (myObject1.queryRecent));
secondThread.Start ();

But очевидно, label1.Text = myObject1.recentString;  исполняет пока методом будет все еще running.

How может я предотвратить эту линию исполняя до тех пор пока queryRecent метод не закончить исполнять?

Thanks заранее,
Matt
class= " ясное " >
> " codeSnippet " class=
class= " lineNumbers "
class=
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:
тип Form1 " class= " id= " codeSnippet867955
public частично: Форма
{
   Class1 myObject1 = новое Class1 ();
   публика Form1 ()
   {
       InitializeComponent ();
   }

   приватное свободное пространство textBox1_KeyPress (прислужник предмета, KeyPressEventArgs e)
   {
       если (== 13 e.KeyChar), то
       {
           myObject1.myString = textBox1.Text;

           //Run этот метод в второй резьбе, поэтому GUI не замерзают пока он исполняет:
           myObject1.queryRecent ();

           //Don ' t исполняет до тех пор пока myObject1.queryRecent не быть законченн
           label1.Text = myObject1.recentString;
}}}


тип Class1
{
    общественный шнур myString = «инициал myString»;     //set внешн
    общественный шнур recentString = «инициал recentString»;	//set путем queryString
    общественный шнур allString = «инициал allString»;    //set queryAll

    queryRecent публики пустые ()
    {
        //simulate длинний вопрос базы данных:
        Thread.Sleep (3000);  
        recentString = myString + «. Еще некоторые текст»;
    }

    queryAll публики пустое ()
    {
         //simulate длинний вопрос базы данных:
         Thread.Sleep (5000); 
         allString = myString + «. Некоторый другой текст»;
    } 
}
class=

Ответ : Multithreading в C# .NET

Вы можете использовать BackgroundWorker () как это:
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:
    общественный частично тип Form1: Форма
    {

        приватное bgw = null System.ComponentModel.BackgroundWorker;
        приватное Class1 myObject1 = новое Class1 ();

        публика Form1 ()
        {
            InitializeComponent ();
        }

        приватное свободное пространство textBox1_KeyPress (прислужник предмета, KeyPressEventArgs e)
        {
            если (null == bgw), то
            {
                bgw = новое BackgroundWorker ();
                bgw.DoWork += новое DoWorkEventHandler (bgw_DoWork);
                bgw.RunWorkerCompleted += новое (bgw_RunWorkerCompleted) RunWorkerCompletedEventHandler;
            }

            если (&& == 13 e.KeyChar! bgw.IsBusy)
            {
                textBox1.Enabled = ложно;
                myObject1.myString = textBox1.Text;
                bgw.RunWorkerAsync ();
            }
        }

        пустое bgw_DoWork (прислужник предмета, DoWorkEventArgs e)
        {
            myObject1.queryRecent ();
        }

        свободное пространство bgw_RunWorkerCompleted (прислужник предмета, RunWorkerCompletedEventArgs e)
        {
            label1.Text = myObject1.recentString;
            textBox1.Enabled = true;
        }

    }
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us