Загрузка Win формы из dll в другом AppDomain
От: boa67  
Дата: 15.02.08 05:43
Оценка:
Всем привет!
Столкнулся вот с такой проблемой:
В dll находится обычная форма с несколькими визуальными контролами

public partial class Form1 : Form
{
  public Form1()
  {
     this.Show();
  }
...
}


В основной программе тоже находится форма (главная) и мне нужно загрузить Form1 в другом домэне:

MyDomain = AppDomain.CreateDomain("NewDomain")
MyDomain.CreateInstanceFrom("...\WindowsApplication1.dll", "WindowsApplication1.Form1");


Форма появляется, но она почему то глюкаво работает: если курсор находится в гриде, то при нажатии стрелки(любой) курсор ввода перемещается на другой контрол; клавиша табуляции перемещает курсор ввода в обратном направлении. Может и еще глюки есть, но меня и эти совсем не устраивают. Когда загружаю Form1 в текущем домэне, то там все нармально работает

Подскажите пожалуйста, может я че не так делаю, или какие нибудь настройки нужно изменить... !!!
Re: Загрузка Win формы из dll в другом AppDomain
От: Hacker_Delphi Россия  
Дата: 15.02.08 11:33
Оценка: 2 (1)
Здравствуйте, boa67, Вы писали:

B>Подскажите пожалуйста, может я че не так делаю, или какие нибудь настройки нужно изменить... !!!


Насколько я понимаю, чтобы все крутилось в соседнем AppDomain'е нужно в нем создать очередь сообщений...
я не 100 процентно в этом уверен, но на 99 — да.
то есть, в соседнем домене надо создавать что-то типа Program. или же его статический метод звать.
наилучший вариант — нарисовать что-то типа такого класса:
public class FormStarter: MarshalByRefObject
{
    public void StartForm(string Assembly, string Type)
    {
        Form frm = (Form)Activator.CreateInstance(Assembly, Type);
        // Далее - одно из двух:
        Application.Run(frm);
        // или 
        frm.ShowDialog();
    }
}


по поводу создания инстанса в хелп не смотрел, студию тоже не запускал — мог ошибиться. но в целом все должно быть верно и принцип понятен.
соответственно создавать в главном приложении надо как раз FormStarter и его методы уже дургать...
Да, еще хорошо бы у FormStarter'а перекрыть InitializeLifetimeServices (или как-оно-там)...
... << RSDN@Home 1.2.0 alpha rev. 789>>
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[2]: Загрузка Win формы из dll в другом AppDomain
От: boa67  
Дата: 18.02.08 11:49
Оценка:
Здравствуйте, Hacker_Delphi, Вы писали:

H_D>Насколько я понимаю, чтобы все крутилось в соседнем AppDomain'е нужно в нем создать очередь сообщений...

H_D>я не 100 процентно в этом уверен, но на 99 — да.
H_D>...

Спасибо! Вы оказались правы на 100%
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.