2013-08-27 6 views
7

Una volta ho visto il codice sorgente di un'applicazione winform e il codice aveva un Console.WriteLine();. Ho chiesto il motivo per questo e mi è stato detto che era a scopo di debug.Qual è lo scopo di Console.WriteLine() in Winform

Pls qual è l'essenza di Console.WriteLine(); in un winform e quale azione esegue perché quando ho provato ad utilizzarlo, non ha mai scritto nulla.

+0

Hai controllato la finestra Output? (anche se, onestamente, l'autore dovrebbe usare Debug. */Trace. *) –

+4

Modificare il tipo di progetto Winform in Applicazione console ('progetto/proprietà/applicazione/tipo di output') e riprovare. Tutto in uno :) – I4V

+0

Probabilmente quella linea di codice doveva essere temporanea. Immagino che sia stato messo lì solo così lo sviluppatore potrebbe impostare un punto di interruzione per il debug. – Crispy

risposta

12

Scrive sulla console.

L'utente finale non lo vedrà e, a dire il vero, è molto più pulito inserirlo in un log corretto, ma se lo si esegue tramite VS, verrà visualizzata la finestra della console.

2

Non eseguirà nulla a meno che lo Console sia stato reindirizzato per dire la finestra Output. In realtà, dovrebbero invece sfruttare lo Debug.WriteLine.

Il vantaggio di Debug.WriteLine è che viene ottimizzato quando si crea la modalità Release.

NOTA: come ha sottolineato Brad Christie e Haedrian, a quanto pare sarà infatti scrivere alla finestra Console in Visual Studio durante l'esecuzione di un'applicazione Windows Form. Si impara qualcosa di nuovo ogni giorno!

4

Le Winform sono solo app per console che mostrano finestre. È possibile indirizzare le informazioni di debug all'app della console.

Come si può vedere nell'esempio seguente, c'è un comando che collega la finestra genitore, quindi invia le informazioni ad esso.

using System; 
using System.Runtime.InteropServices; 
using System.Windows.Forms; 

namespace MyWinFormsApp 
{ 
    static class Program 
    { 
     [DllImport("kernel32.dll")] 
     static extern bool AttachConsole(int dwProcessId); 
     private const int ATTACH_PARENT_PROCESS = -1; 

     [STAThread] 
     static void Main(string[] args) 
     { 
      // redirect console output to parent process; 
      // must be before any calls to Console.WriteLine() 
      AttachConsole(ATTACH_PARENT_PROCESS); 

      // to demonstrate where the console output is going 
      int argCount = args == null ? 0 : args.Length; 
      Console.WriteLine("nYou specified {0} arguments:", argCount); 
      for (int i = 0; i < argCount; i++) 
      { 
       Console.WriteLine(" {0}", args[i]); 
      } 

      // launch the WinForms application like normal 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 
    } 
} 

Qui é la risorsa per questo esempio: http://www.csharp411.com/console-output-from-winforms-application/

+0

"Le Winform sono solo app per console che mostrano finestre" - mi permetto di non essere d'accordo, e anche con fermezza. Esistono due tipi di applicazioni in Windows: le applicazioni della GUI che creano finestre e le applicazioni della console (non GUI) che vengono eseguite in una console in modalità carattere, quelle più note sono cmd.exe e Powershell. Le app della console * possono * creare finestre chiamando le API appropriate e le app della GUI * possono * leggere e scrivere stdin e stdout come fanno le app della console, ma ciò non significa che non siano due animali completamente diversi. E sì, come altri hanno sottolineato, Console.WriteLine() in un'applicazione GUI non è il metodo consigliato. –

+0

@LucVdV se non sei d'accordo, quindi pubblica la tua risposta affinché la comunità possa trarne beneficio. Sarebbe più utile quindi commentare una risposta di 4 anni fa lol. –

+0

Indico un errore nella tua risposta, senza andare fino al downvoting. Se preferisci un downvote, dillo. –

3

Non sarebbe davvero utilizzarlo normalmente, ma se è stato collegato un console o utilizzare AllocConsole, funzionerà come in qualsiasi altra applicazione console e l'uscita sarà visibile lì.

Per il debug rapido, preferisco Debug.WriteLine ma per una soluzione più robusta, la classe Trace può essere preferibile.

+1

Io uso solo il vecchio standby Debug.Print - l'output va alla Finestra Immediata che funziona per il semplice debug del codice. – rheitzman