2013-08-03 33 views
5

Ich verwende AllocConsole(), um eine Konsole in einer Winform-Anwendung zu öffnen.Verhindern, dass die Anwendung beendet wird, wenn die Konsole geschlossen wird

Wie kann ich verhindern, dass die Anwendung beendet wird, wenn die Konsole geschlossen wird?

EDIT

Das Update von completionpercentage von Zeit zu Zeit ist das, was ich in der Konsole angezeigt werden soll

void bkpDBFull_PercentComplete(object sender, PercentCompleteEventArgs e) 
    { 
     AllocConsole(); 
     Console.Clear(); 
     Console.WriteLine("Percent completed: {0}%.", e.Percent); 
    } 

ich die RichTextBox als Alternative

versucht
 s =(e.Percent.ToString()); 
     richTextBox1.Clear(); 
     richTextBox1.AppendText("Percent completed: " +s +"%"); 

Aber ich Ich kann die Zeit für die Aktualisierung des CompletionPercentage nicht sehen. Es erscheint nur, wenn es zu 100% abgeschlossen ist.

Irgendwelche Alternative?

+0

Sie meinen, mit der Nähe 'X'button? –

+0

ja die x-Taste auf der Konsole –

+0

Sie können das nicht stoppen oder deaktivieren. Sie können eine Benachrichtigung mit SetConsoleCtrlHandler() erhalten, aber der Aufruf von ExitProcess() wird immer danach gemacht. Verwenden Sie keine Konsole, wenn Sie sich das nicht leisten können. –

Antwort

0

Siehe die Antworten über here. Wie in den Antworten erwähnt, gibt es no way to stop the application from getting closed.

Aber als Workaround können Sie Ihre own text output solution in einer der Antworten beschrieben haben.

1

Ich weiß, dass dies eine Aufgabe ist, die selten auftaucht, aber ich hatte etwas Ähnliches und beschloss, mit ein paar Hacks zu gehen.

http://social.msdn.microsoft.com/Forums/vstudio/en-US/545f1768-8038-4f7a-9177-060913d6872f/disable-close-button-in-console-application-in-c

-Deaktiviert die Schaltfläche "Schließen" auf einer benutzerdefinierten Konsolenanwendung.

Ihre Textbox Lösung sollte auch funktionieren. Es klingt ähnlich wie das Aufrufen einer Funktion aus dem Hauptthread, die das Formular bindet, das sich auch im Hauptthread befindet und Ihnen beim Aktualisieren Ihrer Textbox Sorgen bereitet. Ziehen Sie in Betracht, einen neuen Thread und entweder einen Ereignishandler zu erstellen, um Ihr Textfeld zu aktualisieren, oder verwenden Sie den Aufruf von methodinvoker aus dem neuen Thread, um das Textfeld zu aktualisieren. Klicken Sie unten auf eine bereits beantwortete Frage, um zu erfahren, wie Sie dies durchführen können.

How to update textboxes in main thread from another thread?

public class MainForm : Form { 
    public MainForm() { 
     Test t = new Test(); 

     Thread testThread = new Thread((ThreadStart)delegate { t.HelloWorld(this); }); 
     testThread.IsBackground = true; 
     testThread.Start(); 
    } 

    public void UpdateTextBox(string text) { 
     Invoke((MethodInvoker)delegate { 
      textBox1.AppendText(text + "\r\n"); 
     }); 
    } 
} 

public class Test { 
    public void HelloWorld(MainForm form) { 
     form.UpdateTextBox("Hello World"); 
    } 
} 
Verwandte Themen