Console.WriteLine nie pojawia się w oknie Output

85

Wprowadziłem kilka Console.WriteLinewywołań do przetestowania, ale nie pojawiają się one w oknie wyjściowym?

public static ArrayList myDeliveries = new ArrayList();

public mainForm(){
    InitializeComponent();
}

private void mainForm_Load(object sender, EventArgs e){

    if (!File.Exists("../../MealDeliveries.txt")){
        MessageBox.Show("File not found!");
        return;
    }

    using (StreamReader sr = new StreamReader("../../MealDeliveries.txt")){
        //first line is delivery name 
        string strDeliveryName = sr.ReadLine();
        Console.WriteLine("Test content");

        while (strDeliveryName != null){

            //other lines 
            Delivery d = new Delivery(
                strDeliveryName, 
                sr.ReadLine(),
                sr.ReadLine(), 
                sr.ReadLine(),
                sr.ReadLine(), 
                sr.ReadLine(),
                sr.ReadLine()
            );

            mainForm.myDeliveries.Add(d);

            //check for further values
            strDeliveryName = sr.ReadLine();
        }
    }

    displayDeliveries();


}


private void displayDeliveries(){

    lstDeliveryDetails.Items.Clear();
    Console.WriteLine("Test content");
    Console.WriteLine(mainForm.myDeliveries.Count);
    foreach (Delivery d in mainForm.myDeliveries){
        lstDeliveryDetails.Items.Add(d.DeliveryName);

    }
}

Czy ktoś może pomóc?

sark9012
źródło
Rozwiązałem problem, napisałem kod w niewłaściwy sposób. Nie
udało się

Odpowiedzi:

56

Jeśli zamierzasz wykorzystać te dane wyjściowe w środowisku produkcyjnym, użyj elementów członkowskich klasy Trace . To sprawia, że ​​kod jest przenośny, możesz łączyć różne typy odbiorników i dane wyjściowe do okna konsoli, okna debugowania, pliku dziennika lub cokolwiek innego, co chcesz.

Jeśli jest to tylko tymczasowy kod debugujący, którego używasz do sprawdzenia, czy określony kod jest wykonywany lub ma prawidłowe wartości, użyj klasy Debug, jak sugeruje Zach .

Jeśli absolutnie musisz używać konsoli, możesz dołączyć konsolę w Mainmetodzie programu .

Aaronaught
źródło
109

Consoledane wyjściowe do okna konsoli i aplikacji Winforms nie pokazują okna konsoli. Powinieneś być w stanie System.Diagnostics.Debug.WriteLinewysłać dane wyjściowe do okna wyjściowego w swoim IDE.

Edycja: Jeśli chodzi o problem, czy zweryfikowałeś, że mainForm_Loadfaktycznie dzwonisz? Możesz umieścić punkt przerwania na początku, mainForm_Loadaby zobaczyć. Jeśli nie jest wywoływany, podejrzewam, że mainForm_Loadnie jest powiązany z Loadwydarzeniem.

Ponadto, jest bardziej wydajny i ogólnie lepiej zastąpić On{EventName}zamiast subskrypcji {EventName}z poziomu klas pochodnych (w przypadku nadrzędne OnLoadzamiast Load).

Zach Johnson
źródło
5
Lubię to? System.Diagnostics.Debug.WriteLine ("some tetttttttttt23423423423423423ttttttttttttttttttttt");
sark9012
2
@Luke - tak, ale możesz Import System.Diagnosticsto znacznie uprościć. I wolę Tracedo tego używać klasy.
Joel Coehoorn
2
Na górnym pasku nawigacyjnym programu Visual Studio przejdź do pozycji Widok> Dane wyjściowe, aby wyświetlić wartości z System.Diagnostics.Debug.WriteLine.
Chad Kuehn
13

Jeśli chcesz, aby Console.WriteLine("example text")dane wyjściowe były wyświetlane w oknie Dane wyjściowe debugowania, tymczasowo zmień typ danych wyjściowych aplikacji z aplikacji konsoli na aplikację systemu Windows.

Z menu wybierz Projekt + Właściwości i przejdź do Typ wyjścia: lista rozwijana, przejdź do aplikacji Windows, a następnie uruchom aplikację

Oczywiście powinieneś zmienić to z powrotem, aby zbudować aplikację konsolową przeznaczoną do uruchamiania poza IDE.

(testowane z Visual Studio 2008 i 2010, spodziewaj się, że powinno działać również w późniejszych wersjach)

davervw
źródło
Jest to lepszy sposób, jeśli chcesz szybko skopiować wyniki swojej aplikacji.
Mark Kram,
2
Dlaczego Console.Writeline nie działa w aplikacji Console? Brzmi to bardzo sprzecznie z intuicją.
sydd
^^ Tak, co? To zawsze działało. A teraz nie jest. To wygląda na błąd w programie Visual Studio.
Triynko
3

Za pomocą Console.WriteLine( "Test" );można zapisywać komunikaty dziennika w oknie danych wyjściowych (menu Widok -> dane wyjściowe) w programie Visual Studio dla projektu Windows Forms / WPF.

Jednak spotkałem się z przypadkiem, w którym to nie działało, a tylko System.Diagnostics.Debug.WriteLine( "Test" );działało. Zrestartowałem Visual Studio i Console.WriteLine()zacząłem znowu pracować. Wygląda na to, że jest to błąd programu Visual Studio.

Dhiren Sarup
źródło
1

Jeśli tworzysz aplikację wiersza poleceń, możesz również użyć Console.ReadLine()na końcu kodu, aby poczekać na naciśnięcie klawisza „Enter” przed zamknięciem okna konsoli, aby móc odczytać dane wyjściowe. Jednak zarówno odpowiedzi dotyczące śledzenia i debugowania zamieszczone powyżej są lepszymi opcjami.

paul jerman
źródło
1

Spróbuj odznaczyć pole wyboru „Użyj zarządzanego trybu zgodności” w

Narzędzia => Opcje => Debugowanie => Ogólne

U mnie to zadziałało.

slava.stackoverflow
źródło
Miałem to włączone podczas debugowania poprzedniego projektu cpp / cli i najwyraźniej powoduje ten problem, a także brak logowania NLog do konsoli.
Blackey
0

Kiedy problem występuje na Mac VS 2017 (z którym się spotkałem).

  1. Przejdź do opcji Projekt >> „Nazwa Twojego projektu”.
  2. Pojawi się okno opcji
  3. Idź do RUN >> Domyślna opcja menu
  4. Zaznacz opcję „Uruchom na konsoli zewnętrznej” PRAWDA i powiedz OK

Uruchom teraz kod aplikacji.

VSB
źródło
-1

Stary wątek, ale w VS 2015 Console.WriteLine nie zapisuje do okna wyjściowego, jeśli opcja „Włącz proces hostingu programu Visual Studio” nie jest zaznaczona lub jest wyłączona we właściwościach projektu -> karta Debugowanie

Blak RUSH
źródło
-3

Wybierz widok >> Wyjście, aby otworzyć okno wyjściowe.

W oknie wyników możesz zobaczyć wynik

Vinoth Joseph
źródło
1
To nie odpowiada na pytanie. Użytkownik wyraźnie mówi, że znajduje się w oknie OUTPUT (i dlatego ma to zaznaczone).
Richard Duerr,