Hallo,
ich bin gerade dabei einen Corba-Server zu schreiben, der den Zugriff auf einen Com-Server bereitstellen soll. Ich verwende dafür den IIOP.
Ich habe aber das Problem das die Zugriffe auf die Methoden des Corba-Servers in einem anderen Thread laufen als im Main, indem ich auch den Com-Server initalisiere.
Hier der Corba-Server
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: 26: 27: 28: 29: 30: 31: 32:
| using System; using System.Collections; using System.ComponentModel; using System.Text; using FuncLibRepository; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using Ch.Elca.Iiop.Idl; using Ch.Elca.Iiop;
namespace CorbaServer { class Class1 { public static int port = 4567; public static string host = "localhost";
[STAThread] static void Main(string[] args) { ComClient myComClient = new ComClient(); IiopChannel channel = new IiopChannel(port); ChannelServices.RegisterChannel(channel);
string objectURI = "com"; RemotingServices.Marshal(myComClient, objectURI); Console.WriteLine("Corba-Server läuft!"); Console.ReadLine(); } } } |
und hier die Methoden... sind aber noch leer...
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: 26: 27: 28: 29: 30: 31: 32:
| using System; using System.Collections; using System.Text; using FuncLibRepository; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using Ch.Elca.Iiop.Idl; using Ch.Elca.Iiop;
namespace CorbaServer { public class ComClient : MarshalByRefObject, FuncLibRepository.com { public ComClient() { System.Console.WriteLine("init com interface!"); } public void init() { }
public void deInit() { System.Console.WriteLine("function from com interface..."); } } } |
in einigen anderen Beiträgen habe ich gelesen das es bei den Windows Forms sowas gibt..
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| if (InvokeRequired) { BeginInvoke(new StringParameterDelegate(UpdateStatus), new object[]{value}); return; } statusIndicator.Text = value; |
Mein Problem ist, dass die ein Threadwechsel stattfinden muss. Damit die über Client aufgerufen methoden z.B. DeInit() im selben Thread ablaufen wie der Konstruktor der Klasse in der ich dann den Com-Server initalisieren will.
Weiß jemand einen Rat?
Gruß
Rene