Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
beats
100 / 41 / 9
Регистрация: 09.12.2012
Сообщений: 591
1
.NET 4.x

Выполнение метода в отдельном потоке

12.08.2013, 17:25. Просмотров 1398. Ответов 6
Метки нет (Все метки)

В моей программе есть метод авторизации на одном сайте, вызываю вот так:
C#
1
AuthMethod(LoginTextBox.Text, PassTextBox.Text);
Довольно неудобно при его выполнении окно программы зависает, становится недоступным на 7 сек. пока метод не отработал.

Я никогда не работал с потоками, но решил что для убирания такого виса нужно сделать запуск в потоке, я сделал вот так:
C#
1
2
Thread myThread1 = new Thread(() => AuthMethod(LoginTextBox.Text, PassTextBox.Text));
                        myThread1.Start();
Но теперь ошибка и метод вообще не срабатывает((
подскажите как быть?
0
Миниатюры
Выполнение метода в отдельном потоке  
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.08.2013, 17:25
Ответы с готовыми решениями:

Выполнение метода в отдельном потоке с возможностью его остановки
Поясните пожалуйста как выполнить определенный метод в отдельном потоке, чтоб его можно было...

Запуск метода в отдельном потоке
Доброго времени суток! На форме есть textBox1 и кнопка. При нажатии на кнопку, создаётся новый...

Запуск метода по таймеру в отдельном потоке
Доброго времени суток! Господа знатоки помогите начинающему. Есть метод получения почты public...

Выполнение длительных операций в отдельном потоке с отображением этапов работы пользователю
Например есть код: private void button1_Click(object sender, EventArgs e) {...

При запуске метода с параметром делегатом в отдельном потоке виснет все приложение
public partial class MainWindow : Window { public delegate void...

6
Монфрид
1218 / 1028 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
12.08.2013, 17:28 2
всё дело в том что вы пытаетесь из другого потока обратиться к объекту на форме. Довольно распространённая проблема, обойти её можно обращаясь к элементам формы через Invoke, перед этим проверяя InvokeRequered у объекта формы
пишу по памяти:
C#
1
2
3
4
5
6
if (WebBrowser1.InvokeRequired)
{
 WebBrowser1.Invoke(new MethodInvoker(()=>{
  //тут работаете с компонентом
}));
}
0
beats
100 / 41 / 9
Регистрация: 09.12.2012
Сообщений: 591
12.08.2013, 17:59  [ТС] 3
Спасибо, однако теперь программа всеже зависает, но чуть короче на 3 сек. где-то и метод видимо не весь отрабатыват, там еще в label1 должно было появится уведомление о успешной авторизации и + еще некоторые небольшие действия
0
Монфрид
1218 / 1028 / 293
Регистрация: 07.03.2012
Сообщений: 3,243
Завершенные тесты: 2
12.08.2013, 18:20 4
вместо Invoke попробуйте BeginInvoke
0
Learx
1049 / 856 / 195
Регистрация: 31.03.2010
Сообщений: 2,510
12.08.2013, 18:23 5
beats, для каждого контрола создаем свой метод для работы непосредственно с этим контролом и делегаты на них. с другого потока не обращаемся к контролу, а вызываем метод BigeinInvoke этого контрола с передачей соответствующего делегата.
0
beats
100 / 41 / 9
Регистрация: 09.12.2012
Сообщений: 591
12.08.2013, 21:17  [ТС] 6
Цитата Сообщение от Монфрид Посмотреть сообщение
вместо Invoke попробуйте BeginInvoke
не повлияло ни на что.

Да уж для каждого контрола создавать очень не удобно, придется разобрать метод на куски(.
ладно спс буду разбиратся
0
Psilon
Master of Orion
Эксперт .NET
6055 / 4913 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
Завершенные тесты: 4
13.08.2013, 00:23 7
beats, важно загонять в BeginInvoke не весь метод, а только куски, которые в форму пишут/читают. Этих кусков должно быть немного, это понятно, так что если их много - проблема в дизайне, не в многопотоке.
0
13.08.2013, 00:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2013, 00:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выполнение метода в другом потоке
Есть один синхронный метод из сторонней dllки, принимающий на вход массив байт и возвращающий...

Создать приложение, в отдельном потоке вычисляющее значение w и непрерывно обновляющее его в потоке
Ребят, с потоками не работал не когда. Есть задание , я понимаю что хотят, а вот как сделать...

Запросы к БД в отдельном потоке
Всем привет! Хочу спросить специалистов и просто опытных людей. Делаю приложение winForms....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.