Ik ben een applicatie aan het maken, welke moet openen wanneer je dubbelklikt op een file met een bepaalde extensie. Dat is natuurlijk allemaal niet zo moeilijk, maar ik zit op dit moment even met het probleem dat wanneer de applicatie al draait, ik dat proces wil recyclen, zodat het al bestaande proces de file opent (de manier waarop bijvoorbeeld Winamp werkt, wanneer je nog een MP3 dubbelklikt, als Winamp al draait).
Ik heb begrepen dat je dit met remoting kan doen. Dit heb ik geprobeerd, maar werkt toch niet helemaal zoals ik wil. Wanneer de 1e instantie start van mijn applicatie, start deze een remoting server. Deze opent via TCP een bepaalde poort zodat je via die poort een connectie naar die applicatie kan maken.
Wanneer de 2e instantie start, checked deze of de mutex van mijn app al bestaat (wat dan dus zo is) en start hij een remoting client. Deze client gaat dan via een Activator een object ophalen en daarvan wil ik de functie ophalen.
Hieronder mijn code in mijn main().
Het mainform object, is het object wat mijn standaard form is. Binnen deze form/class bestaat een variabele, maar wanneer er op deze manier de functie (ImportFile) wordt aangeroepen zijn binnen deze instantie alle variabelen leeg. Dit komt waarschijnlijk omdat er als het ware een nieuwe instantie aangemaakt.
Dit is dus geen gedrag wat ik wil, ik wil namelijk gewoon een event/functie triggeren binnen mijn al bestaande object 'mainform'.
Doe ik iets verkeerd? Is remoting wel op deze manier bedoeld ?
Ik heb begrepen dat je dit met remoting kan doen. Dit heb ik geprobeerd, maar werkt toch niet helemaal zoals ik wil. Wanneer de 1e instantie start van mijn applicatie, start deze een remoting server. Deze opent via TCP een bepaalde poort zodat je via die poort een connectie naar die applicatie kan maken.
Wanneer de 2e instantie start, checked deze of de mutex van mijn app al bestaat (wat dan dus zo is) en start hij een remoting client. Deze client gaat dan via een Activator een object ophalen en daarvan wil ik de functie ophalen.
Hieronder mijn code in mijn main().
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| Mutex mutex = new Mutex(true, "RSSextender", out ok);
if (!ok)
{
// Send commands to running RSSextender.
TcpChannel clientChannel = new TcpChannel();
ChannelServices.RegisterChannel(clientChannel);
MainForm mainForm = (MainForm)Activator.GetObject(typeof(RSS_Proxy.MainForm),
"tcp://localhost:9910/RSSextenderServer");
if (mainForm != null)
mainForm.ImportFile(@"C:\export.xml");
return;
}
// Start remoting server to accept connections from other apps
TcpChannel channel = new TcpChannel(9910);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(Type.GetType("RSS_Proxy.MainForm"),
"RSSextenderServer", WellKnownObjectMode.SingleCall);
GC.KeepAlive(mutex); |
Het mainform object, is het object wat mijn standaard form is. Binnen deze form/class bestaat een variabele, maar wanneer er op deze manier de functie (ImportFile) wordt aangeroepen zijn binnen deze instantie alle variabelen leeg. Dit komt waarschijnlijk omdat er als het ware een nieuwe instantie aangemaakt.
Dit is dus geen gedrag wat ik wil, ik wil namelijk gewoon een event/functie triggeren binnen mijn al bestaande object 'mainform'.
Doe ik iets verkeerd? Is remoting wel op deze manier bedoeld ?