Здравствуйте, ilya39, Вы писали:
I>Проблема следующая:
I>Приложение не имеет главной формы. Метод Application.Run() принимает потомка ApplicationContext (назовем его appctx). В конструкторе appctx создается и запускается дополнительный поток. Мне надо при определенном событии из дополнительного потока отдать команду главному потоку создать форму и показать ее. Как это сделать? Пробовал обявлять делегат и в дополнительном потоке вызывыть метод appctx, создающий форму, через этот делегат (BeginInvoke) — в результате появляется окно не реагирующее ни на какие события. Как же все-таки это сделать?
а просто mainForm.Invoke(new MyDelegate(mainForm.MethodCompatibleWithMyDelegate))?
I>В конце концов создал форму заранее (в конструкторе appctx). И попробовал показывать через метод Control.BeginInvoke (этой формы). Но оказывается сей метод не работает если форму не показать хотябы раз (Show). А мигать формой при запуске мне не улыбается...
просто создание Handle`а окна в нормальном режиме происходит во время первого показа окна. попробуй сделать
mainForm.CreateHandle();
после создания главного окна.
кстати, про первую половину твоих мытарств — экземпляр класса главного окна ты в каком потоке создаешь?
1).Нету у меня класса главного окна. Нет и его экземпляров. Поэтому не могу воспользоваться и методом Invoke объекта MainForm. Он (объект MainForm) мне и не нужен. У меня значок в трее висит и все а все диалоговые окна создаются при необходимости.
2).За CreateHandle — огромное спасибо! Фактически теперь проблема решена...