C# Wie kann ich mein Programm neustarten

V

Vietcong

Gast
Wenn ich eine Konsole habe, es mit dem Compiler ausführe (Visual Studio), dann kann ich ja mit Console.ReadLine(); die Konsole aufhalten und sobald ich am Ende des Programmes Eingabe drücke geht die Konsole zu!

Kann mir einer den Quellcode geben wie ich mein Programm wieder auf den Prozesseinstiegspunkt hüpfen lassen kann?

das untere soll else if heißen wurde aber bei meinen PNG weggeschnitten!
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    10,1 KB · Aufrufe: 1.340
Dafür wurden Schleifen erfunden.
Code:
while( true )
{
  ...
  if( abbruch? )
    break;
  ...
}
 
So etwas wie goto solltest du unbedingt vermeiden. Das ist sehr unsaubere Programmierung. Wie mein vorredner schon meinte solltest du Schleifen benutzen. Ich bevorzuge dazu diese Variante
Code:
bool beenden = false;

do
{
 //Abfragecode
}
while (beenden != true);
Erläuterung: Diese Schleife führt den Code solange aus, wenn die Variable beenden ungleich Wahr ist. Wird die Variable beenden auf Wahr gesetzt, wird die Schleife abgebrochen.

Außerdem solltest du nach deiner ersten If Anweisung mit einer Else If Anweisung (Zweite Alternative) fortführen. Zum Schluss kannst du ein Else einbauen um falsche Eingaben abzufangen. Viel spaß beim Programmieren und das Fragen nicht scheuen.
 
Wie oben schon geschrieben kannst du dein Programm natürlich in einer Schleife laufen lassen.

Es gibt aber auch die Möglichkeit, dein Programm komplett neu zu starten:

Code:
using System.Reflection

...

Code:
var info = Console.ReadKey();
if (info.Key == ConsoleKey.R)
{
[INDENT]
var fileName = Assembly.GetExecutingAssembly().Location;
System.Diagnostics.Process.Start(fileName);
[/INDENT]
}
 
Wie wäre es mit:
Code:
System.Diagnostics.Process.Start(Application.ExecutablePath);

Statt:
Code:
var fileName = Assembly.GetExecutingAssembly().Location;
System.Diagnostics.Process.Start(fileName);
 
Wie kommt man bitte bei einem so simplen Problem zu reflection? Und dann noch einem Anfänger empfehlen, nee nee... :freak:

Daumen hoch für Yuuris Lösung!
 
Wie kommt man bitte bei einem so simplen Problem zu reflection? Und dann noch einem Anfänger empfehlen, nee nee...

Wie simple das Problem ist, kann ich anhand der Fragestellung nicht erkennen.

Reflection ist nur eine von vielen Möglichkeiten, welche zum Ziel führt. Und wenn der TE ein ambitionierter Programmierer ist, dann kann er sich ja mal kurz damit auseinandersetzen, und sich dann immer noch für die einfachere Methode via Schleife entscheiden.

Auch als Anfänger schadet es nicht, mal über den Tellerrand hinauszublicken ;)
 
Dennoch ist es umständlicher, mit der Weise, wie Du voran gehst.. Du kannst genauso gut auf die Anwendung selbst zurückgreifen, was einfacher ist?
 
Dennoch ist es umständlicher, mit der Weise, wie Du voran gehst.. Du kannst genauso gut auf die Anwendung selbst zurückgreifen, was einfacher ist?

Ich sagte ja, es gibt immer mehrere Wege zum Ziel, und deiner ist natürlich noch ein wenig eleganter, weil man sich mit dem Auslesen des Application-Propertys noch einen Schritt (Reflection) spart.

Trotzdem ist der Ansatz ja derselbe, da beide anhand des Pfades der laufenden Applikation einen neuen Prozess starten, während ich mich mittels einer Schleife natürlich im gleichen Prozess bewege und somit das Programm nicht echt neu gestartet wird.
 
Zuletzt bearbeitet:
dcobra schrieb:
Oder einfach while(!beenden). Deine Version ist eine Tautologie, du schreibst ja auch nicht int i = 5 + 0 :)

while(!beenden) lässt sich aber sehr schlecht erkennen, wenn man viel Quelltext lesen muss.
while(beenden == false) kann man deutlich besser erkennen.

Nur, weil's kürzer ist, ist es nicht gleich 'cool' ... :)
 
Nein, das ist einfach schlechter Stil und total überflüssig. Schau dir mal Quellcode eines größeren Projekts deiner Wahl an, das wirst du nirgends finden.
 
voodoo44 schrieb:
while(beenden == false) kann man deutlich besser erkennen.

Damit implizierst du ja, dass man aus Gründen der Lesbarkeit den Negations-Operator zu Gunsten eines Vergleichs auf false nicht benutzen sollte?

Dann findest du gegenteil = !value sicherlich auch schlechter als gegenteil = (value == false) ? ;)

Nein, mal spaß bei Seite, eine boolsche Variable sollte man nicht nochmal auswerten zu müssen um zu erkennen was los ist, atomarer geht es ja nicht als die Variable selbst.
 
carom schrieb:
Nein, das ist einfach schlechter Stil und total überflüssig. Schau dir mal Quellcode eines größeren Projekts deiner Wahl an, das wirst du nirgends finden.
Ich kenne einige Quelltexte von SEHR großen Projekten! Keines davon entwickelt so.

Da geh ich beim Lesen des Quelltextes doch kaputt, wenn ich das sehe.


Poke646 schrieb:
Dann findest du gegenteil = !value sicherlich auch schlechter als gegenteil = (value == false) ? ;)
Das ist was anderes als das, was ich unten meine.

$a = !$b ist eine Zuweisung.
Dort werden wohl ziemlich selten Klammern gesetzt.

Poke646 schrieb:
Nein, mal spaß bei Seite, eine boolsche Variable sollte man nicht nochmal auswerten zu müssen um zu erkennen was los ist, atomarer geht es ja nicht als die Variable selbst.
Nein, aber mach dir mal den Spaß und schreib mal eine Quelltextdatei mit - sagen wir mal 500-1000 Zeilen. Und dann hack da mal überall solche Vergleiche in die If-Konstrukte (am besten bei mehreren Vergleichen in der IF-Struktur). Der Überblick geht verloren.

Ich zumindest kann
PHP:
if ((!$a && $c != !$b) || !((!$foo == $bar) === $bla) && !empty($foo))
... keine Ahnung, ob die Zahl der klammern passt :D

auf jeden Fall SEHR schlecht lesen.

Oder ein einfacheres Beispiel:
PHP:
if (empty($foo)) {
   $this->_object = new Zend_Framework_Foobar();
   $this->_object->getInstance()->returnFloat('baz');
} elseif (!empty($foo))
   $this->_object = new Zend_Framework_Foobar();
   $this->_object->getInstance()->returnFloat('baz');
} else {
    //this shouldnt happen
}
vs
PHP:
if (empty($foo) === true) {
   $this->_object = new Zend_Framework_Foobar();
   $this->_object->getInstance()->returnFloat('baz');
} elseif (empty($foo) === false)
   $this->_object = new Zend_Framework_Foobar();
   $this->_object->getInstance()->returnFloat('baz');
} else {
    //this shouldnt happen
}

Selbst da sieht man schon den Unterschied - obwohl das noch ... ein kleiner übersichtlicher Block ist.

Hast du denn wirklich schonmal VIEL Quelltext an einem Stück lesen und nachvollziehen müssen? Ich mache das von Montag bis Sonntag - besonders spaßig sind ja dann solche Entwickler, die sowas machen:
if (empty($foo) !== true) .... DAS ist immer toll ... da muss man sich immer halb das Hirn verknoten.
 
Zurück
Oben