Консультация № 173973
04.11.2009, 21:10
0.00 руб.
0 5 0
Установим свойства для контролов:

TextBox:
MultiLine - True.

BackgroundWorker:
Все по умолчанию.

Для контрола BackgroundWorker создадим обработчики событий DoWork и RunWorkerCompleted. Запуск фонового потока выполним в обработчике нажатия кнопки 1. Сам фоновый поток будет выполнять код функции functionThread2:
...
...
...
Текст в приложении.
...
...
...

Всё делаю как написано, но ничего не происходит! Т.е. в TextBox не появляется True! Когда сам прописываю BackgroundWorker, всё нормально. Когда добавляю его как компонент на форму - ничего не работает. ПОЧЕМУ? Может я что-то не так делаю?


Приложение:
private void button1_Click(object sender, EventArgs e)
{
//Методу RunWorkerAsync можно передавать объект в качестве параметра
backgroundWorker1.RunWorkerAsync();
}
private bool functionThread2()
{
return true;
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = functionThread2();
}
private void backgroundWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
textBox1.Text = Convert.ToString(e.Result);
}

Обсуждение

Неизвестный
04.11.2009, 21:42
общий
Hromovnik046:
Сделал тоже самое - выводит true. Поля Вы по умолчанию оставляете, а обработчики-то назначены событиям? Хотя, судя по названиям, они генератором созданы.
Неизвестный
04.11.2009, 22:41
общий
Hromovnik046:
Аналогично с Evgenijm. Посмотрите на InitializeComponent() формы. Должно быть примерно так.
Код:
        private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(13, 13);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(165, 237);
this.textBox1.TabIndex = 0;
//
// backgroundWorker1
//
this.backgroundWorker1.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork);
this.backgroundWorker1.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);

//
// button1
//
this.button1.Location = new System.Drawing.Point(185, 13);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(75, 23);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
this.PerformLayout();
}
Неизвестный
05.11.2009, 02:30
общий
Micren:
Ага, после этих строчек всё заработало. В принципе всё понятно, можно было бы и самому догадаться. Просто сегодня впервые с этим столкнулся. Тогда вот такой ещё мини-вопрос: по двойному клику на BackgroundWorker я могу прописывать DoWork, а другие события а-ля RunWorkerCompleted как мне прописать? Заходить в [Название_формы].Designer.cs и писать прямо там или это не совсем правильно и есть более человеческий способ?
Заранее спасибо!!!
Неизвестный
05.11.2009, 02:52
общий
Hromovnik046:
Обратите внимание на панель Properties. Там есть кнопка Events(типа молния). Выбирайте ее и увидите все возможные события для Вашего элемента.
Неизвестный
05.11.2009, 11:22
общий
Отлично! Спасибо Вам, большое человеческое! :-)
Форма ответа