# Zwei Programm zur selben Zeit, aber wie?



## Benni (3 November 2011)

Hallo Ihr, ich bins mal wieder,
ich habe mal eine kleine Frage, vielleicht ist es auch relativ simpel ich bin mir jedoch nicht sicher.
Vorab: Ich programmiere in der Sprache C# Visual Studio 2010.

Und zwar bin ich dran ein kleines Kartenspiel zu Programmieren, im Spiel habe ich ein Hauptfenster, in welchem anschließend das Spiel laufen soll.
Des weiteren habe ich in diesem Fenster eine Menüleiste, auf welche auch während des Spiels zugreifbar sein soll, somit habe ich zwei oder mehr Programme auf welche ich Gleichzeitig zugreifen möchte. Das ganze soll dann so ähnlich wie das Solitär von Microsoft aussehen und funktionieren.
Nun bin ich mir nicht sicher wie es am besten bzw. am einfachsten zu programmieren ist.
Würde dieses Problem mittels eines Backgroundworkers funktionieren oder eher nicht, wenn nicht warum ist das dann so und was würdet ihr so vorschlagen?
Wenn ja, was würdet ihr eurer Meinung nach im Backgroundworker laufen lassen, das Spiel selbst oder eher die Menüleiste?


Mit freundlichen Grüßen
und bestem Dank

Benjamin Quade


----------



## Marc_Quark (3 November 2011)

Benni schrieb:


> Des weiteren habe ich in diesem Fenster eine Menüleiste, auf welche auch während des Spiels zugreifbar sein soll, somit habe ich zwei oder mehr Programme auf welche ich Gleichzeitig zugreifen möchte.
> Benjamin Quade


Wieos nimmst du nicht einfach das Menuitem? Und was meinst du damit, dass du mehrere Programm hast?


----------



## Benni (3 November 2011)

Naja ich meinte dies so,
dass ich eben meine Methode Spielstart() laufen habe und dann vermutlich nicht auf andere Methoden zugreifen kann, das sehe ich doch so richtig oder nicht? Und wenn ich mich eben dann in dieser Methode befinde, kann ich doch somit auch nicht gleichzeitig auf meine Menüleiste zugreifen oder ist dies anderst?
Oder was hast du für einen Vorschlag, wie würdest du das eigentliche Spiel ablaufen lassen? So dass ich eben in meinem Hauptfenster das Spiel laufen sehe jedoch noch andere Ationen tätigen kann wie z.B. eben die Menüleiste.
Ich hoffe meine Erklärungen sind verständlich ansonst bitte einfach nochmal schnell melden.

Gruß Benni


----------



## Marc_Quark (3 November 2011)

Schau mal nach sogenannten "Events", diese funktion ist zwar im Menuitem schon gegeben kannst es aber natürlich selbst nachprogrammieren... Ein Event ist änlich wie ein Interrupt, dass Programm wird zum Zeitpunkt einer Aktion (in deinem Fall ein klick auf das Menü ) unterbrochen und das entsprechende Eventhandle wird abgearbeitet...


----------



## Benni (3 November 2011)

Wenn ich das also richtig verstehe, dann müsste die Menüleiste also ein Event auslösen, welches das Programm auch automatisch bei einem Klick unterbrechen wird und ich muss also meine Mehtoden welche die Klicks auf die einzelnen Menüpunkte auslösen gar nicht speziell behandeln?


----------



## Marc_Quark (3 November 2011)

Genau, schau einfach mal in der Hilfe nach Events. Das ist sehr ausführlich....


----------



## Benni (3 November 2011)

alles klar dann versuch ich mal mein bestes sobald ich daheim wieder dazu komme.
Falls ich nicht klar komme, dann melde ich mich einfach wieder 

Dank dir für deine rasche Antwort

Gruß Benni


----------



## Benni (3 November 2011)

So ich bins mal wieder,
also ich habe es eben mal mit der Menüleiste getestet, in dem ich einfach in einer Methode eine endlosschleife gebastelt habe, aber wie erwartet konnte ich dann rein gar nichts mehr tun, auch mittels Backgroundworker hab ich es versucht, aber hier war derselbe efekt zu erkennen.
Zu den Events konnte ich leider auch nichts passendes zu meinem Problem finden, außer ich hab da was übersehen, war jedoch nicht der Meinung,
habt ihr vielleicht noch einen Vorschlag?

Gruß Benni


----------



## StefanK (3 November 2011)

Hi,
wenn du eine Endlosschleife bastelst (was man eigentlich vermeiden sollte), würde ich diese in einem zweiten Thread oder Backgroundworker laufen lassen. Du musst in der Schleife allerdings auch mal Ressourcen freigeben, das kannst du mit 'Do events' machen (ist aber, glaub ich, aus VB6) oder besser mit Thread.sleep([zeit in ms]). Dann sollte die Gui auch wieder bedienbar sein.
Gruß
Stefan


----------



## Benni (4 November 2011)

Ok,
wenn ich dann Thread.sleep() auf eine bestimmte Zeit setze, läuft das Programm dann dennoch im Hintergrund weiter ohne dass es beendet wird?

Es ist ja nicht direkt eine Endlosschleife, es dreht sich ja um ein Spiel, ich will aber während des Spiels auf eine Menüleiste wie im Solitär zugreifen, ich bin mir aber nicht sicher, bzw. ich hab keine Ahnung was hierzu die beste und einfachste Möglichkeit ist.

Gruß Benni


----------



## StefanK (4 November 2011)

Hmm,
du schreibst nicht wirklich deutlich was du hast und was du möchtest. Endlosschleife ja oder nein?

Wie funktioniert dein Spiel? 
Werden durch Interaktionen des Users Events ausgelöst? 
Wozu brauchst du eine Endlosschleife? 

Du kannst auch eine zyklische Programmabarbeitung durch einen Timer realisieren. Zwischen den Intervallen ist dein Programm dann frei für andere Dinge (Menu,...). Das ist aber nicht wirklich schön, weil die Anwendung dann "ruckelt" bei Interaktionen, die die Oberfläche betreffen.

Thread.sleep()


----------



## Benni (4 November 2011)

Hmmm...
ich glaube ich muss mir eine komplett andere Möglichkeit überlegen oder suchen,
das funktioniert nicht so wie ich es gerne hätte, naja mal schaun...

Ich bin jedoch für alle VOrschläge, Anregungen und Ideen offen und Dankbar.

Gruß Benni


----------



## Benni (4 November 2011)

StefanK schrieb:


> Hmm,
> du schreibst nicht wirklich deutlich was du hast und was du möchtest. Endlosschleife ja oder nein?
> 
> Wie funktioniert dein Spiel?
> ...



ALso ne die Endlosschleife war nur um schnell zu testen.
Es soll so sein, dass ich am Anfang in einer zweiten Form (Neues Spiel) Die Anzahl an Spieler etc. auswähle, dann werden diese Variablen an das erste übergeben durch klick auf OK.
Wenn dann auf OK geklickt wurde wird das neue Spiel quasi gestartet... Ich dachte mir eben dass ich das irgendwie in einer einzigen Methode o.ä. schreiben könnte, war glaub aber eher ein Denkfehler. Denn somit wäre das so ähnlich wie eine Endlosschleife, denn die Methode würde ja erst beendet wenn das Spiel zu Ende ist. Und somit könnte ich ja auch nicht auf die Menüleiste zugreifen.
Also werde ich das Spiel dann doch anderst Programmieren müssen...

Also ganz grob kann man sagen, dass das Spiel so ähnlich wie das Spiel "Hearts" von Microsoft funktioniert.

Gruß Benni


----------

