Announcement

Collapse
No announcement yet.

Invoke und Remoting

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Invoke und Remoting

    Hallo,

    habe ein sehr schwerwiegendes Problem.

    Ich habe ein Remoting-ClientObject abgeleitet von der Klasse MarshalByRefObject und einem selbstdefinierten Interface. Weiterhin hat die Klasse einen EventHandler. In einer anderen Klasse baue ich nun die Verbindung zum Server auf und übergebe diesem das ClientObject. Der Server schickt nun über das Clientobjekt ein dataSet an den Client. Das Clientobjekt empfängt das DataSet und löst ein Event aus, das Daten vorhanden sind. Dieses Event im Clientobjekt wird über einen Thread gefeuert. Die übergeordnete Klasse empfängt das Ereignis und wirft wiederum einen Event an das Hauptprogramm.
    Im Hauptprogramm hole ich das DataSet aus dem Clientobjekt ab und über die Methode DataGrid.Invoke(...) binde ich dieses an das Grid.

    Soweit funktioniert alles wunderbar und auch richtig.

    Nun zu meinem Problem:
    Wenn ich das Programm starte funktioniert das alles ohne Probleme. Im Hauptprogramm erhalte ich das Ereignis und über die Invoke-Methode binde ich das DataSet an das Grid, sooft ich möchte.
    Ich sollte noch erwähnen, das die Klasse, die die Verbindung zum Server herstellt, dies immer wieder versucht und wieder Aufbaut, wenn der Server nicht mehr Ansprechbar ist. Funktioniert auch prima.
    Wenn ich nun den Server abschalte, und wieder starte, dann bekomme ich immer noch das Ereignis. aber die Invoke-Methode verläuft irgendwie im Sande sprich, sie löst keine Exception oder sonstige Handlung aus sondern beendet meine Prozedur ohne jemals in der angegebenen Prozedur zu landen.

    Ich bin irgendwie ratlos. Kann mir jemand helfen??

    Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

    MfG
    Ronny

  • #2
    Hi Ronny,

    Hmmmm .... sobald der Event beim Client ankommt, sollte es eigentlich keine Probleme mehr geben. Sofern du - wie in deiner Frage geschrieben - Invoke() verwendest, um die Thread-Grenze Richtung GUI-Thread zu überschreiten [1]. Ohne Invoke() könnte natürlich alles mögliche passieren ;-).

    Kannst du dieses Verhalten auch in einem kleineren Sample reproduzieren (einfach In-Memory, ohne SQL Server, etc.)? Falls ja würde ich's mir anschauen, wenn du's mir per email an [email protected] schickst.

    Ciao,
    -Ingo

    [1] Nähere Infos für andere Mitlesende z.B. auf http://www.ingorammer.com/RemotingFAQ/HANDLING_EVENTS_HANGS_APPLICATION.htm

    Comment

    Working...
    X