Вот моя ситуация:
Я создал экземпляр ac # usercontrol в главном потоке, но он не добавлен в форму.
//global declaration
usercontrol1 datacontrol;
constructor()
{
.......
datacontrol = new usercontrol1();
........
}
У меня есть асинхронный фоновый поток, который запускает событие, которое обрабатывается созданным экземпляром управления данными.В обработчике событий есть:
if(InvokeRequired){BeginInvoke(..);}
. Это должно предотвратить любые перекрестные вызовы.Однако когда это вызывается, InvokeRequired имеет значение false, поэтому обработчик не вызывается в правильном потоке.Поэтому в обработчике, когда я пытался this.labelname.text = "blah", выдается исключение между потоками.
Однако, если я добавляю элемент управления на панель в основной форме и удаляю его, то разрешаюфоновый поток для запуска события.Обработчик входит, но на этот раз для InvokeRequired задано значение true, поэтому он правильно вызывает себя в контексте mainthreads, избегая исключения.
Может кто-нибудь объяснить мне, почему действие по добавлению его в панель и удалению его устраняетОшибка?
Для формы нет событий onLoad, поэтому все должно быть правильно создано без прорисовки.
спасибо!Stephanie