class ЧУДО_КЛАСС
{
void form_moved(int new_x_top, int new_y_top)
{
изменить положение ПРОГИ1;
}
}
...
//где-то там при запуске
Assembly ass = null;
ass = Assembly.Load(СБОРКА_ПРОГИ2);
Type myclass = ass.GetType("PROGA2.Form1");
object o = Activator.CreateInstance(myclass, new object[] { ЭКЗЕМПЛЯР_ЧУДО_КЛАССА });
Application.Run((Form)o);
Как организовать связь двух прог?
Есть у меня необходимость, странная, но все же необходимость.
Есть у меня две проги, одна моя, другая нет, но исходники есть к каждой.
Мне нужно их как-то связать. т.е. чтобы события из одной проги передавались в другую.
Рассмотрим на примере, чтоб было понятнее.
Есть большое окно ПРОГИ1, и есть мальнькое окно ПРОГИ2. Допустим мне нужно чтоб окно ПРОГИ2 всегда находилось в центре ПРОГИ1.
Собственно, это значит, что если вдруг кто-то перетащил окно ПРОГИ1 или ПРОГИ2, то окно другой из них тоже должно сменить свое положение.
Я планирую скомпилировать одну из прог в сборку. Скорее всего ПРОГУ2, так как она меньше.
Скорее всего такое взаимодействие нужно организовать с помощью хитрого класса, который передать конструктору ПРОГИ2. Только что это должен быть за класс, я не знаю.
Хотелось бы так:
ПРОГА1
Код:
ПРОГА2
Код:
class Form1
{
Form1(ЧУДО_КЛАСС чк)
{
что-то с ним делает;
}
//главное то, что где-то в коде есть событие смены положения формы
void FormMoved(EventArgs evt)
{
//а как тут оповестить ПРОГУ1 что надо вызывать метод form_moved(int new_x_top, int new_y_top)? :(
}
}
{
Form1(ЧУДО_КЛАСС чк)
{
что-то с ним делает;
}
//главное то, что где-то в коде есть событие смены положения формы
void FormMoved(EventArgs evt)
{
//а как тут оповестить ПРОГУ1 что надо вызывать метод form_moved(int new_x_top, int new_y_top)? :(
}
}
Надеюсь хоть кто-то понял о чем я писал... Модель клиент-сервер, именованные каналы и sendmessage как-то не хочется делать.
Да и задача не только изменять положения окон, а будет много еще других событий. по сути, ПРОГА1 просто командует ПРОГОЙ2 и должна передавать туда много инфы о событиях. Но и ПРОГА2 тоже может отсылать какие-то события, в общем нужна двухсторонняя связь.
Вдобавок надо как-то сделать чтобы обе проги знали о ЧУДО_КЛАССЕ. Ну или объявить его в обеих, но будут ли они совместимы?
Цитата: Lei fang
Вдобавок надо как-то сделать чтобы обе проги знали о ЧУДО_КЛАССЕ. Ну или объявить его в обеих, но будут ли они совместимы?
MarshalByRef + Remoting, либо WCF поверх pipes.
я уже решил эту задачу другим способом. Обявил так сказать ЧУДО_КЛАСС в отдельной сборке, на котрую есть ссылки в обеих прогах. ЧУДО_КЛАСС, по сути просто приниматель команд у меня, так что я создаю его в ПРОГЕ2 и передаю ПРОГЕ1 и наоборот.
так что выходит так:
Код:
class Form1
{
ЧУДО_КЛАСС чк;
Form1(ЧУДО_КЛАСС чк)
{
this.чк = чк;
}
void FormMoved(EventArgs evt)
{
чк.form_moved(this.Left, thos.Top); //дает команду ПРОГЕ1 изменить свое положение
}
}
{
ЧУДО_КЛАСС чк;
Form1(ЧУДО_КЛАСС чк)
{
this.чк = чк;
}
void FormMoved(EventArgs evt)
{
чк.form_moved(this.Left, thos.Top); //дает команду ПРОГЕ1 изменить свое положение
}
}
А знаешь ли ты, что между приложениями не может быть общего пространства памяти, а значит, и объектов?
Попробуй запускать одно приложение в домене второго. Тогда взаимодействие наладить будет проще.