Application.Exit(); geht nicht
-
Habt ihr eine Idee, warum in diesem Code Application.Exit(); das Programm nicht beendet?
private string[] getData(string sRequestURI) { WebClient wc = new WebClient(); byte[] bContent={0}; try { bContent = wc.DownloadData(sRequestURI); } catch(WebException ex) { string sReturnMessage = ex.Message; MessageBox.Show(sReturnMessage); if(Regex.IsMatch(sReturnMessage, ".+404.+")) { MessageBox.Show("Die Seite konnte auf dem Server nicht gefunden werden!\nDas Programm wird beendet.","Fehler",MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show("Bitte überprüfen sie, ob sie mit dem Internet verbunden sind!\nDas Programm wird beendet.","Fehler",MessageBoxButtons.OK, MessageBoxIcon.Error); } Application.Exit(); } string sContent = Encoding.ASCII.GetString(bContent); string sDataHeader = wc.ResponseHeaders.Get("_"); if(sContent.Length<1) sContent="error"; if(Regex.IsMatch(sContent, ".*error.*")) { MessageBox.Show("Der Server hat einen unbekannten Fehler gemeldet!\nDas Programm wird beendet.","Fehler",MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); string[] moo = {"_error_", "_error_"}; return moo; } else { string[] moo = {"content", "header"}; moo[0]=sContent; moo[1]=sDataHeader; return moo; } }
-
is das bcb?
wenn ja, versuch mal Application->Exit();
-
BCB?
Mein Code ist 'normales' C#
Mit -> geht es nicht.
-
ne, ist auf jeden richtig geschrieben..
wo ist Application.run... ?
kommt er wirklich in dieser zweige rein?
wären zwei fragen, die ich als c# anfängerin stellen würde...
C# programmer can set the ExitCode property in the System.Environment class and
when System.WinForms.Application.Exit() is called,
the value of ExitCode is returned to the run time environment.[ Dieser Beitrag wurde am 20.01.2003 um 06:59 Uhr von elise editiert. ]
-
Hier mal den kompletten Code:
Splash.cs:
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace wBB2_Installer { /// <summary> /// Zusammendfassende Beschreibung für frmSplash. /// </summary> public class frmSplash : System.Windows.Forms.Form { private System.Windows.Forms.PictureBox picLogo; private System.Windows.Forms.Label label1; private System.Windows.Forms.Timer tmrEndSplashCountDown; private System.Windows.Forms.ProgressBar prgWait; private System.ComponentModel.IContainer components; public frmSplash() { // // Erforderlich für die Windows Form-Designerunterstützung // InitializeComponent(); // // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu // } /// <summary> /// Die verwendeten Ressourcen bereinigen. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(frmSplash)); this.picLogo = new System.Windows.Forms.PictureBox(); this.label1 = new System.Windows.Forms.Label(); this.tmrEndSplashCountDown = new System.Windows.Forms.Timer(this.components); this.prgWait = new System.Windows.Forms.ProgressBar(); this.SuspendLayout(); // // picLogo // this.picLogo.BackColor = System.Drawing.Color.Lime; this.picLogo.Image = ((System.Drawing.Bitmap)(resources.GetObject("picLogo.Image"))); this.picLogo.Location = new System.Drawing.Point(8, 24); this.picLogo.Name = "picLogo"; this.picLogo.Size = new System.Drawing.Size(460, 200); this.picLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; this.picLogo.TabIndex = 0; this.picLogo.TabStop = false; // // label1 // this.label1.Font = new System.Drawing.Font("Arial", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.label1.ForeColor = System.Drawing.Color.Red; this.label1.Location = new System.Drawing.Point(8, 248); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(488, 16); this.label1.TabIndex = 1; this.label1.Text = "Warnung: Illegale Weitergabe der Boardsoftware hat einen Lizenzverlust zur Folge!" + ""; // // tmrEndSplashCountDown // this.tmrEndSplashCountDown.Interval = 15; this.tmrEndSplashCountDown.Tick += new System.EventHandler(this.tmrEndSplashCountDown_Tick); // // prgWait // this.prgWait.Location = new System.Drawing.Point(8, 272); this.prgWait.Name = "prgWait"; this.prgWait.Size = new System.Drawing.Size(488, 24); this.prgWait.TabIndex = 2; // // frmSplash // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(212)), ((System.Byte)(208)), ((System.Byte)(200))); this.ClientSize = new System.Drawing.Size(504, 298); this.ControlBox = false; this.Controls.AddRange(new System.Windows.Forms.Control[] { this.prgWait, this.label1, this.picLogo}); this.Cursor = System.Windows.Forms.Cursors.Cross; this.ForeColor = System.Drawing.Color.Black; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Name = "frmSplash"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.TopMost = true; this.Load += new System.EventHandler(this.frmSplash_Load); this.ResumeLayout(false); } #endregion /// <summary> /// Der Haupteinstiegspunkt für die Anwendung. /// </summary> [STAThread] static void Main() { Application.Run(new frmSplash()); } private void tmrEndSplashCountDown_Tick(object sender, System.EventArgs e) { prgWait.Value++; if(prgWait.Value==100) { tmrEndSplashCountDown.Stop(); this.Visible=false; //new frmLicenseCheck().ShowDialog(); frmLicenseCheck LicenseCheck = new frmLicenseCheck(); LicenseCheck.Show(); } } private void frmSplash_Load(object sender, System.EventArgs e) { tmrEndSplashCountDown.Start(); } } }
LicenseCheck.cs
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace wBB2_Installer { /// <summary> /// Zusammendfassende Beschreibung für frmLicenseCheck. /// </summary> public class frmLicenseCheck : System.Windows.Forms.Form { /// <summary> /// Erforderliche Designervariable. /// </summary> private System.ComponentModel.Container components = null; public frmLicenseCheck() { // // Erforderlich für die Windows Form-Designerunterstützung // InitializeComponent(); // // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu // } /// <summary> /// Die verwendeten Ressourcen bereinigen. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Erforderliche Methode für die Designerunterstützung. /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden. /// </summary> private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(frmLicenseCheck)); // // frmLicenseCheck // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(346, 160); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "frmLicenseCheck"; this.Text = "LicenseCheck"; this.Load += new System.EventHandler(this.frmLicenseCheck_Load); } #endregion private void frmLicenseCheck_Load(object sender, System.EventArgs e) { string[] sRequestData = this.getData("http://www.planetcoding.net/sag/ich/nicht"); if(sRequestData[0]=="_error_" || sRequestData[1]=="_error_") { Application.Exit(); } string sContent = sRequestData[0]; string sDataHeader = sRequestData[1]; MessageBox.Show("DataHeader:\n\n"+sDataHeader); MessageBox.Show("Content:\n\n"+sContent); } private string[] getData(string sRequestURI) { WebClient wc = new WebClient(); byte[] bContent={0}; try { bContent = wc.DownloadData(sRequestURI); } catch(WebException ex) { string sReturnMessage = ex.Message; MessageBox.Show(sReturnMessage); if(Regex.IsMatch(sReturnMessage, ".+404.+")) { MessageBox.Show("Die Seite konnte auf dem Server nicht gefunden werden!\nDas Programm wird beendet.","Fehler",MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show("Bitte überprüfen sie, ob sie mit dem Internet verbunden sind!\nDas Programm wird beendet.","Fehler",MessageBoxButtons.OK, MessageBoxIcon.Error); } Application.Exit(); } string sContent = Encoding.ASCII.GetString(bContent); string sDataHeader = wc.ResponseHeaders.Get("_"); if(sContent.Length<1) sContent="error"; if(Regex.IsMatch(sContent, ".*error.*")) { MessageBox.Show("Der Server hat einen unbekannten Fehler gemeldet!\nDas Programm wird beendet.","Fehler",MessageBoxButtons.OK, MessageBoxIcon.Error); Application.Exit(); string[] moo = {"_error_", "_error_"}; return moo; } else { string[] moo = {"content", "header"}; moo[0]=sContent; moo[1]=sDataHeader; return moo; } } } }
Genauer: Obwohl die Funktion getData das Programm beenden sollte, werden die MessageBoxen aus der frmLicenseChech_Load - Funktion noch angezeigt und das Programm nicht beendet.
-
auch wenn ich mich normalerweise selbst daran störe
*hochschieb*
-
ich schiebs auch nochmal hoch, auch wenn ich keine richtige antwort weiß.
habe exit nochmal durchgetestet, und es funzt, am beispiel eines clients, wenn
der server nicht gestartet ist. er soll in diesem falle schließen.
damit es deiner application ähnlich wird (ist natürlich total anders.. ) habe ich das exit in eine eigene klasse reinkatapultiert.
es funzt in allen drei varianten, wobei es eine besonderheit gibt: schreibe ich es vor den try catch block, wird dieser trotzdem erst ausgeführt und danach das programm beendet.hilft dir nicht weiter, aber vielleicht schaut ein anderer dadurch wissend auf deinen code...
using System; using System.Windows.Forms; using System.Net.Sockets; using System.IO; namespace TCPClient { class Test{ public Test(){ Application.Exit(); } } public class Client : Form { private Button btnConnectToServer; private Button btnSendMessage; private StreamReader clientStreamReader; private StreamWriter clientStreamWriter; public Client() { //Connect Button this.btnConnectToServer = new Button(); this.btnConnectToServer.Text = "Connect"; this.btnConnectToServer.Click += new System.EventHandler(btnConnectToServer_Click); //SendMessage Button this.btnSendMessage = new Button(); this.btnSendMessage.Text = "Send Message"; this.btnSendMessage.Top += 30; this.btnSendMessage.Width += 20; this.btnSendMessage.Click += new System.EventHandler(btnSendMessage_Click); //Buttons zur Form hinzufügen this.Controls.Add(this.btnConnectToServer); this.Controls.Add(this.btnSendMessage); } public static void Main(string[] args) { //Clientprogramm starten und Fenster anzeigen Client tcpSockClient = new Client(); Application.Run(tcpSockClient); } private bool ConnectToServer() { Test mytest=new Test(); //hier oben wird der exit erst NACH dem try catch block ausgeführt //Verbindung zum Server herstellen über den angegebenen Port try { TcpClient tcpClient = new TcpClient("localhost",4444); Console.WriteLine("Connected to Server"); //Networkstream vom Server anfordern NetworkStream clientSockStream = tcpClient.GetStream(); clientStreamReader = new StreamReader(clientSockStream); clientStreamWriter = new StreamWriter(clientSockStream); } catch(Exception e) { //so gehts auf jeden fall //Application.Exit(); //wenn der passende server nicht gefunden ist, schließt sich das programm wieder Console.WriteLine("nix kontakt"+e); //und so auch // Test mytest=new Test(); return false; } return true; } ///Event Handlers private void btnConnectToServer_Click(object sender,System.EventArgs e) { //Connect to Server if (!ConnectToServer()) Console.WriteLine("Unable to connect to server"); } private void btnSendMessage_Click(object sender,System.EventArgs e) { try { //Nachricht an Server schicken! clientStreamWriter.WriteLine("Hello Server!"); clientStreamWriter.Flush(); Console.WriteLine("SERVER: "+clientStreamReader.ReadLine()); } catch(Exception se) { Console.WriteLine(se.StackTrace); } } }
-
Inzwischen hab ich den Fehler entdeckt:
Es liegt daran, dass ich meine Library InstallerLibs.dll einbinde.
Wenn ich das using InstallerLibs; weglasse, geht das Beenden.
Aber warum geht es mit der Lib nicht???