2013-08-03 9 views
5

Używam AllocConsole() do otwierania konsoli w aplikacji WinForm.Zapobieganie zamknięciu aplikacji po zamknięciu konsoli

W jaki sposób mogę uniemożliwić zamknięcie aplikacji po zamknięciu Konsoli?

EDIT

Aktualizacja completionpercentage od czasu do czasu jest to, co chcę pokazać w konsoli

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

Próbowałem RichTextBox jako alternatywnego

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

ale nie można zobaczyć czasu aktualizacji aktualizacji. Pojawia się tylko wtedy, gdy jest w 100% kompletny.

Dowolna alternatywa?

+0

masz na myśli używając 'X'button blisko? –

+0

tak przycisk x na konsoli –

+0

Nie można tego zatrzymać ani wyłączyć. Możesz otrzymać powiadomienie za pomocą SetConsoleCtrlHandler(), ale wywołanie ExitProcess() jest zawsze wykonywane po tym. Nie korzystaj z konsoli, jeśli nie możesz sobie na to pozwolić. –

Odpowiedz

0

Odwołaj się do odpowiedzi powyżej here. Jak wspomniano w odpowiedzi, istnieje no way to stop the application from getting closed.

Ale jako obejście, możesz opisać swoją own text output solution w jednej z odpowiedzi.

1

Wiem, że jest to zadanie, które rzadko pojawia się, ale miałem coś podobnego i postanowiłem pójść z kilkoma hackami.

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

-disable przycisk "Zamknij" w aplikacji konsoli zwyczaj.

Rozwiązanie textbox również powinno działać. Brzmi to tak, jakbyś wywoływał funkcję z głównego wątku, który wiąże formularz, który jest również w głównym wątku i powoduje smutek podczas aktualizowania twojego pola tekstowego. Rozważ utworzenie nowego wątku i programu do obsługi zdarzeń, aby zaktualizować pole tekstowe lub użyj metody invoke methodinvoker z nowego wątku, aby zaktualizować pole tekstowe. Link poniżej z już udzielonego pytania na temat tego, jak to zrobić.

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"); 
    } 
}