2013-08-03 4 views
5

Io uso AllocConsole() per aprire una console in un'applicazione winform.Impedire l'uscita dall'applicazione quando la console viene chiusa

Come è possibile impedire all'applicazione di uscire quando la console è chiusa?

EDIT

L'aggiornamento del completionpercentage di tanto in tanto è quello che voglio mostrare in console

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

Ho provato il RichTextBox come l'alternativa

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

Ma io non è possibile visualizzare l'aggiornamento di completamento del periodo di tempo. Appare solo quando è completo al 100%.

Qualsiasi alternativa?

+0

intendi vicino usando 'X'button? –

+0

sì il tasto x sulla console –

+0

Non è possibile fermarlo o disabilitarlo. È possibile ottenere una notifica per esso con SetConsoleCtrlHandler() ma la chiamata ExitProcess() viene sempre effettuata dopo. Non usare una console se non puoi permetterti. –

risposta

0

Fare riferimento alle risposte su here. Come menzionato nelle risposte, c'è no way to stop the application from getting closed.

Ma come soluzione alternativa, è possibile avere il proprio own text output solution descritto in una delle risposte.

1

So che questo è un compito che compare raramente ma ho avuto qualcosa di simile e ho deciso di andare con un paio di hack.

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

il pulsante "Chiudi" su un'applicazione console personalizzata -Disattiva.

La soluzione di casella di testo dovrebbe funzionare anche. Sembra molto che tu stia chiamando una funzione dal thread principale che sta legando il modulo che si trova anche sul thread principale e ti sta causando dolore quando aggiorni la tua casella di testo. Prendi in considerazione la possibilità di creare un nuovo thread e un gestore di eventi per aggiornare la tua casella di testo o utilizzare il metodo invoke methodinvoker dal nuovo thread per aggiornare la casella di testo. Link sotto da una domanda già risposta su come completare questo.

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