Announcement

Collapse
No announcement yet.

Windows Forms Klassenübergreifend

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

  • Windows Forms Klassenübergreifend

    Hallo ich bin neu hier, und Google hat mich sozusagen hier her geschickt
    Habe nix passendes in der Suche gefunden deswegen öffne ich mal nen neuen Thread.
    Und zwar habe ich folgendes Problem:
    Ich programmiere grade eine Server-Client Applikation in .NET 4.0 mit Hilfe von WCF (Bin noch nicht ziemlich weit fortgeschritten in der Programmierung deswegen seit gnädig mit mir).

    Die Grafische Oberfläche für den Server habe ich mit Windows Forms erstellt. Funktioniert auch ganz Super. In meiner Main Funktion (Service Hauptklasse) wird die ServerMainGUI (Name der Klasse für die Oberfläche) initialisiert und die Applikation startet ohne Probleme.
    Ich habe allerdings noch eine weitere Klasse die sich HostFunctions nennt. Dort habe ich die ganzen Service Contracts festgelegt. Also die Funktionen die über den Client aufgerufen werden können.
    Bisher war es so, dass der Client eine Aufgabe ausgeführt hat, und der Server dann den Status ( erfolgreich oder nicht erfolgreich ) auf der Konsole ausgegeben hat.
    Jetzt möchte ich aber, dass diese Statusnachrichten in ein Textfeld (später auch in eine Datei) geschrieben werden können. Aber ich kann in der Klasse für die Host-Funktionen nicht auf die labels, buttons usw. zugreifen.
    Was ja auch völlig klar ist.
    Aber irgendwie muss ich doch die möglichkeit haben diese Events zu beschreiben oder nicht?

    Alle Klassen (ServerMainGUI, Service Hauptklasse und HostFunctions) nutzen den selben Namespace.

    Meine Frage ist daher an euch: Weiß einer, wie ich auf die in der ServerMainGUI erstellten Forms in der HostFunctions Klasse zugreifen kann um bspw. Labels zu ändern?

    Würde mich sehr freuen wenn mir das einer sagen könnte. Oder mir Tipps nennen kann.
    Lasst euch nicht von den WCF Begriffen blenden, die haben damit nicht wirklich was zu tun. Es geht hier lediglich um die Windows Forms in einer anderen Klasse :-)

    Mit freundlichen Grüßen
    Alexander

  • #2
    Hallo Alexander,

    Delegates können Dir hier helfen:

    http://msdn.microsoft.com/de-de/libr...8VS.80%29.aspx

    Die Klasse muss quasi von der Form nichts wissen, aber die Form muss schon die Klasse referenziert haben.

    Grüße

    Comment


    • #3
      Lasst euch nicht von den WCF Begriffen blenden, die haben damit nicht wirklich was zu tun. Es geht hier lediglich um die Windows Forms in einer anderen Klasse .
      Doch es hat indirekt Einfluss. Jeder Clientaufruf wird zu einem abspalten eines Threads mit einer Instanz deiner HostFunctions Klasse führen(du hast doch keine Singleton Implementierung für den WCF Service gewählt?). Wenn du von dort aus auf die ServerMainGUI (die natürlich in einem andern Thread stattfindet) zugreifen willst musst du zumindest die Crossthread Problematik berücksichtigen und diese Aufrufe synchronisieren.

      Ein relativ billige (wenn auch nicht unbedingt gute) Möglichkeit wäre einfach deiner HostFunctions Klasse eine statische Property für die ServerMainGUI Form zu verpassen. Diese einmal beim Service Start setzen und dann danach eben von der HostFunctions Klasse über diese Property (synchronisieren nicht vergessen) auf die Form zugreifen.

      Comment


      • #4
        Vielen Dank für eure Tipps. Werde versuchen Sie umzusetzen. Ich melde mich wenn ich zu einer Lösung gekommen bin oder doch nicht weiter komme.

        @ Ralf: Ja an das Problem habe ich natürlich auch gedacht. Das könnte aber erst später ein Problem werden wenn ich auf dynamische Labels zugreifen will :-)
        Im Moment will ich einfach nur dass der eine Status ob erfolgreich oder nicht reingeschrieben wird. Dieser bleibt dann einfach stehn. Alles was danach noch passiert wird einfach in die nächste Zeile geschrieben.
        Danke für den Hinweis, sollte ich an den Punkt kommen wo ich es brauche, werde ich natürlich versuchen dies zu berücksichtigen.

        Alexander

        Comment


        • #5
          @ Ralf: Ja an das Problem habe ich natürlich auch gedacht. Das könnte aber erst später ein Problem werden wenn ich auf dynamische Labels zugreifen will :-)
          Sobald du auf ein Control zugreifst das nicht zu deinem Thread gehört wird es garantiert knallen wenn du nicht synchronisierst. Keine Chance es später mal zu lösen.

          Comment


          • #6
            Okay, danke für den Link! Dann werde ich das sofort mit berücksichtigen.

            Comment

            Working...
            X