Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2014, 10:33   #1
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию Cross-thread operation not valid

Уважаемые, подскажите, как разрешить ошибку Cross-thread operation not valid при использовании многопотока и контролов

Скажем, есть код, который выбивает с данной ошибкой:
Код:
 private void button1_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            ХХХ ххх = new ХХХ();
            ххх.Filter(progressBar1);
        }
С TextBox и прочей ерундой все решаю через Invoke, а вот с передачей контрола чет в тупике ...
L6go1as вне форума Ответить с цитированием
Старый 12.10.2014, 13:34   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

а зачем передавать контрол?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 12.10.2014, 14:09   #3
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
а зачем передавать контрол?
Мне так удобнее. Да и всяко лучше, чем забивать форму методами (имхо).
L6go1as вне форума Ответить с цитированием
Старый 12.10.2014, 15:14   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Мда... ну удачи вам
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 13.10.2014, 20:08   #5
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Так как ? )
Неуж-то никто не сталкивался, а если сталкивались, то может лучшую конструкцию предложите ?
L6go1as вне форума Ответить с цитированием
Старый 13.10.2014, 21:20   #6
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
Так как ? )
..то может лучшую конструкцию предложите ?
Цитата:
Сообщение от Luuzuk;
а зачем передавать контрол?
Связь между вопросами прослеживаете?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 13.10.2014, 22:38   #7
L6go1as
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
Связь между вопросами прослеживаете?
Давай так, ты флудишь дальше, а я буду ждать помощи, ок ?
L6go1as вне форума Ответить с цитированием
Старый 14.10.2014, 00:27   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
Давай так, ты флудишь дальше, а я буду ждать помощи, ок ?
реально зачем передавать контрол?
ReportProgress же есть.

ошибка возникает именно на передаче или внутри?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.10.2014, 11:20   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

L6go1as

то, что тебе нужно называется IProgress<>

Код:
var progress = new Progress<int>();
progress.ProgressChanged += (sende, val) => { ... };

await Task.Factory.StartNew(() => DoWork(progress));

void DoWork(IProgress<int> p)
{
   for (int i=0; i<10; i++
   { 
      // ...
      p.Report(i);
   }
}
Rififi вне форума Ответить с цитированием
Старый 14.10.2014, 12:19   #10
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Цитата:
Сообщение от L6go1as Посмотреть сообщение
Давай так, ты флудишь дальше, а я буду ждать помощи, ок ?
Во-первых, тыкать не стоит.
Во-вторых, рекомендую прочитать хрестоматийную сагу про x y z
Ну и напоследок, если ждете помощи, то потрудитесь нормально отвечать на вопросы. Разделять логику и UI надо
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
thread slipp Win Api 2 24.11.2013 03:11
Thread vs Timer Дmmm Общие вопросы Delphi 4 27.02.2013 15:57
Хочу создать онлайновый-шутер на примере игры Cross Fire makshero Фриланс 0 06.11.2011 12:28
Thread Cpluser Общие вопросы .NET 6 30.03.2010 23:32