[C#] Event/function triggeren vanuit ander process

Pagina: 1
Acties:

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 09:46
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().
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 ?

  • Vedett.
  • Registratie: November 2005
  • Laatst online: 12:18
Had overlaatst hetzelfde probleem. De zoekterm "Single instance application" bracht mij toen naar deze plaats op de msdn website:
http://msdn.microsoft.com...orms/html/reaworapps1.asp

Hier staat een framework dat je kan gebruiken. Het enige wat je moet doen was volgens mij de static vodi Main aanpassen. Dat was één method call geloof ik. En al je forms laten overerven van de base form. (zo weet het framework wanneer je 0 forms open hebt, zodat het Application.Close() kan oproepen.)

Heb het geprobeerd en het werkte toen. Ik heb toen wel wat veranderd in de code. Bij mij was het zo dat een remote connectie maar 10 min ofzo bleef openstaan. Dus wanneer je een tweede applicatie startte na 10 min crashte het. Ik heb de code niet bij de hand dus dat wordt nog even zoeken.

Heel misschien stop ik wel langs mijn werke deze avond.

[Edit]
Zoeken naar deze link in google levert misschien wel nuttige info op:
http://www.google.be/sear...s/html/reaworapps1.asp%22

[ Voor 12% gewijzigd door Vedett. op 03-03-2006 07:58 ]


  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 09:46
Cool, ik ga je links effe naspitten. Moet wel zeggen dat ik nu al zoveel mogelijkheden heb geprobeerd, niet normaal.

Er was zelfs een link dat het tegenwoordig met WinForms 2.0 (neem aan dat die in C# 2.0 zitten?) heeeeel makkelijk zou moeten zijn, maarja, code examples of ook maar links naar artikelen stonden daar niet bij.

Mocht je code hebben die werkt, dan zie ik het graag ;)