Попробую описать ситуацию на словах.
Имеется backgroundWorker. На его событие report подписано несколько функций.
В одной из них заполняется список. В определенный момент времени в этой же функции открывается новая форма.
Возможно и модальная. В дальнейшем эта же функция должна продолжать заполнять список и обновлять этот список в форме.
Вот тут то и вопрос. Можно ли так работать со ВТОРОЙ формой?
Я экспериментировал с label на второй форме. Вроде не глючило. Но многопоточность такая вещь, что лучше спросить.
Здравствуйте, vasilov, Вы писали:
V>Попробую описать ситуацию на словах.
V>Имеется backgroundWorker. На его событие report подписано несколько функций.
V>В одной из них заполняется список. В определенный момент времени в этой же функции открывается новая форма.
V>Возможно и модальная. В дальнейшем эта же функция должна продолжать заполнять список и обновлять этот список в форме.
V>Вот тут то и вопрос. Можно ли так работать со ВТОРОЙ формой?
V>Я экспериментировал с label на второй форме. Вроде не глючило. Но многопоточность такая вещь, что лучше спросить.
label может и не глючит, но часть контролов требуют чтобы доступ к ним осущестлялся из создавшего их потока (для этого смотри BeginInvoke и Invoke)
есть еще особенность часть конролов (WebBrowser, например) требует чтобы его поток был STA, а нормальная много поточная работа возможна только в MTA. Чтобы обойти это ограничение нужно создать дополнительный поток добавив к классу формы примерно такие методы
private static MyForm container = null;
private static void startForm()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyForm);
}
// вернет ссылку на форму если нужна обработка
public static MyForm Browser
{
get
{
lock (staticSyncRoot)
if (container == null)
thread = new Thread(new ThreadStart(startForm));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
while (container == null)
Application.DoEvents();
return container;
}
}
Здравствуйте, vasilov, Вы писали:
V>Попробую описать ситуацию на словах.
V>Имеется backgroundWorker. На его событие report подписано несколько функций.
Что это за событие report? Гарантируется ProgressChanged и RunWorkerCompleted будут выполнены в потоке GUI. В них ты можешь безопасно общаться.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Здравствуйте, vasilov, Вы писали:
V>Но можно ли взаимодействовать с другой формой, причем созданной этим же событием ранее?.
Да
... << RSDN@Home 1.2.0 alpha rev. 0>>