Есть такой код:
Вариант многопоточного чекера.
Запускается много потоков отсюда:
Код:
рrivate void button_start_Click(object sender, EventArgs e)
{
int nOfTread = (int) numeriс_nOf_Threds.Value;
nOfTreads = nOfTread;
threads = new Thread[nOfTreads];
richTextBox_log.Text += "ПРОВЕРКА ЗАПУЩЕНА!!!" + "\n";
for (int i = 0; i < nOfTreads; i++)
{
threads[i] = new Thread(Conect_tu_new);
threads[i].IsBackground = true;
threads[i].Start();
}
}
Тут в этот методе Идет создание массива классов где идет ПОСТ запрос с указаным Логином и паролем:
Код:
private void Conect_tu_new()
{
Post_class[] clafoget = new Post_class[user_list.Count()];
int[] rezultcount = new int[user_list.Count];
while (user_list.Count >= 1)
{
Monitor.Enter(this);
string textstring = user_list[0];
user_list.Remove(textstring);
//Тут ниже переделал конструктор класса по умолчанию что бы принимал 2 значения типа ЛОгин:пароль и прокси лист.
clafoget[class_count] = new Post_class(textstring,proxy_list);
Monitor.Exit(this);
clafoget[class_count].Run(); // Запуск ПОСТ в классе
class_count++;
}
MessageBox.Show("Проверка окончена!!!");
}
Ну и есть метод где будет обрабатываться результат пост запроса:
Код:
private void obrabotka(string rezult, string user)
{
if (checkBox_log.Checked) {File.AppendAllText(patch_log,user+"\n");}
// ТУТ проводятся манипуляции с результатом запроса
}
НУ и сам вопрос и просьба!!
Объясните как используя делегаты и события сделать так что если ответ в объекте класса который работает в потоке при получении ответа после пост запроса вызвать метод ОБРАБОТКА и передать в него полученный ответ?????
Просьба сюда меня с таким кодом не посылать: [Ссылки могут видеть только зарегистрированные пользователи. ]
я только учусь)
Еще просьба если есть возможность приведите яркие примеры или дайте ссылку на понятный исходник (или киньте ссылку в личку обещаю хранить тайну))))
Думаю поднятый мною вопрос будет многим интересен!!!!
Последний раз редактировалось fesssi; 25.08.2011 в 21:39.
Re: События и делегаты!!! Наведите пример или помогите!!!!
если к форме обращаться, то
this.obrabotka("","");
Если запись в переменные :
this.peremennaya1="ololotrololo";
Если в пользовательские элементы:
textBox1.Invoke(new EventHandler ( delegate{textBox1.Text="ololo";}));
Еще не понятно зачем использовать void обработки??? Если результат распаршивания будет текст, не проще ли использовать обычную процедурку:
private string obrabotka(string rezult, string user)
{
string resultat="";
if (checkBox_log.Checked) {File.AppendAllText(patch_log,user+"\n");}
// ТУТ проводятся манипуляции с результатом запроса
return resultat;
}
То есть результат обращения будет ответ распаршенный.
Последний раз редактировалось Hermein; 25.08.2011 в 23:28.
Re: События и делегаты!!! Наведите пример или помогите!!!!
Цитата:
Сообщение от Hermein
если к форме обращаться, то
this.obrabotka("","");
Если запись в переменные :
this.peremennaya1="ololotrololo";
Если в пользовательские элементы:
textBox1.Invoke(new EventHandler ( delegate{textBox1.Text="ololo";}));
Тут плиз попбробней ваще недогнал? зачем это написано... Я виже делегат и вроде создание события но как оно отработает если реально будет вызвано из потока не основного.
Цитата:
Сообщение от Hermein
Еще не понятно зачем использовать void обработки??? Если результат распаршивания будет текст, не проще ли использовать обычную процедурку:
private string obrabotka(string rezult, string user)
{
string resultat="";
if (checkBox_log.Checked) {File.AppendAllText(patch_log,user+"\n");}
// ТУТ проводятся манипуляции с результатом запроса
return resultat;
}
То есть результат обращения будет ответ распаршенный.
Да тут шол парсинг текста. НО только этот метод вызывался в мониторе что бы потоки вместе туда не входили... Вот и потому... Сделать парсинг текста в классе где пост запрос нет смысла так как в результате надо будет возвращать много значений.
Мне надо пример: как описать такое событие что бы из фонового потока где выполняется пост запрос с конкретный логином:паролем вызывался метод в основном потоке формы и получал результат запроса (где и парсился).
Re: События и делегаты!!! Наведите пример или помогите!!!!
я же тебе ответил:
задаем ссылку на вызов и вызываем, чтобы вызвать процедуру, или использовать переменные обращаемся к основной форме : this.textBox1.Text
это нужно для фонового потока:
например надо заюзать значения из рича, то многочисленные обращения, особенно из кучи потоков могут вызвать исключения и для этого в потоке создаем новую переменную:
string ololo = this.textBox1.Text;
и в потоке потом используем эту переменную ololo, для записи в переменные формы так же просто this.trololo=ololo; прям из фонового потока, только обращение к изменению значений элементов формы используют делегаты.