2013-08-27 13 views
7

Kiedyś widziałem kod źródłowy aplikacji winform, a kod miał Console.WriteLine();. Poprosiłem o przyczynę tego i powiedziano mi, że jest to do celów debugowania.Jaki jest cel Console.WriteLine() w WinForm

Pls, co jest istotą Console.WriteLine(); w winform i jakie działania wykonuje, ponieważ kiedy próbowałem go używać, nigdy nic nie napisał.

+0

Czy sprawdziłeś okno Output? (choć, szczerze mówiąc, autor powinien używać Debugowania. */Trace. *) –

+4

Zmień typ projektu WinForm na Application Console ('project/properties/application/output type') i spróbuj ponownie. Wszystko w jednym :) – I4V

+0

Ta linia kodu miała prawdopodobnie być tymczasowa. Domyślam się, że został tam umieszczony, więc programista może ustawić punkt przerwania do debugowania. – Crispy

Odpowiedz

12

Pisze do konsoli.

Użytkownik końcowy go nie zobaczy, i szczerze mówiąc, jego znacznie czystsze jest umieszczenie go w odpowiednim dzienniku, ale jeśli uruchomisz go przez VS, okno Konsoli zostanie wypełnione.

2

Nie wykona niczego, chyba że Console został przekierowany do okna o nazwie Output. Naprawdę, powinny one zamiast tego używać Debug.WriteLine.

Zaleta Debug.WriteLine polega na tym, że podczas pracy w trybie Release zostanie zoptymalizowany.

UWAGA: jak podkreślił Brad Christie i Haedrian, najwyraźniej będzie to w rzeczywistości napisać do okna Console w Visual Studio podczas uruchamiania aplikacji Windows Forms. Każdego dnia uczysz się czegoś nowego!

4

Winformy to po prostu aplikacje konsolowe wyświetlające okna. Możesz kierować informacje debugowania do aplikacji konsoli.

Jak widać w poniższym przykładzie, jest polecenie, które podłącza okno główne, a następnie pompuje do niego informacje.

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

Oto zasobem dla tego przykładu: http://www.csharp411.com/console-output-from-winforms-application/

+0

"WinFormy to tylko aplikacje konsolowe, które wyświetlają okna" - nie zgadzam się, a nawet stanowczo. Istnieją dwa rodzaje aplikacji w systemie Windows: aplikacje GUI, które tworzą okna, oraz aplikacje (nie-GUI) konsoli działające w konsoli trybu znakowego, z których najlepiej znane to cmd.exe i Powershell. Aplikacje konsolowe * mogą * tworzyć okna, wywołując odpowiednie interfejsy API, a aplikacje GUI * potrafią * czytać i zapisywać stdin i stdout jako aplikacje konsolowe, ale to nie znaczy, że nie są to dwa zupełnie różne zwierzęta. I tak, jak inni zauważyli, Console.WriteLine() w aplikacji GUI nie jest zalecanym sposobem. –

+0

@LucVdV, jeśli się nie zgadzasz, a następnie opublikuj własną odpowiedź, aby społeczność mogła z niej skorzystać. Byłoby bardziej użyteczne niż komentowanie odpowiedzi sprzed 4 lat. –

+0

Wskazuję na błąd w Twojej odpowiedzi, nie posuwając się aż do downwotowania. Jeśli wolisz głosowanie, po prostu powiedz to. –

3

Nie byłoby naprawdę używać go normalnie, ale jeśli już załączeniu konsoli lub użyj AllocConsole będzie funkcjonować tak jak w każdej innej aplikacji konsoli i wyjście będzie tam widoczne.

Dla szybkiego debugowania wolę Debug.WriteLine, ale dla bardziej niezawodnego rozwiązania preferowana może być klasa Trace.

+1

Po prostu używam starego trybu gotowości Debug.Print - wyjście przechodzi do natychmiastowego okna, które działa znaleźć dla prostego debugowania kodu. – rheitzman