Remoting - обращение к объекту Windows.Forms

 
0
 
.NET
ava
QryStaL | 13.08.2007, 18:43
Код сервера:


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
TcpChannel channel = new TcpChannel(8080);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RObject), "server", WellKnownObjectMode.Singleton);
}
}


Код клиента:


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
IRemote obj1 = (IRemote)Activator.GetObject(typeof(IRemote), "tcp://192.168.2.10:8080/server");
obj1.Call();
}
}


Код удаленного объекта:


public interface IRemote
{
void Call();
}
public class RObject : MarshalByRefObject, IRemote
{
public void Call()
{
Form2 f2 = new Form2();
f2.Show();
}
}


При вызове obj1.Call() создается и отображается Form2, но сразу затем подвисает (белый экран, в диспетчере задач статус "не отвечает").
Form1 работает корректно. В чем может быть проблема?
Comments (2)
ava
tol05 | 13.08.2007, 18:02 #
что-то непонятно ничего..
1. Что такое Form2 у удаленного объекта?
2. "server" - это dll? Как вообще выглядит приложение, сколько сборок, как называются, кто на кого ссылается?

Навскидку (интуитивно smile ) сразу не нравится строчка f2.Show()
сдается мне, что через Invoke нужно с формой работать.
ava
QryStaL | 13.08.2007, 23:48 #
Большое спасибо за идею, помогло. smile Как-то я не додумался, что Invoke нужен не только для работы с контролами формы, но и создания новых форм из основной (из другого потока).
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  QryStaL   tol05
advanced
Submit