Saya mempelajari C # dengan mengikuti panduan di MSDN .
Sekarang, saya baru saja mencoba Contoh 1 (di sini adalah tautan ke MSDN ), dan saya mengalami masalah: mengapa jendela konsol segera ditutup setelah ditampilkan output saya?
using System;
public class Hello1
{
public static int Main()
{
Console.WriteLine("Hello, World!");
return 0;
}
}
c#
.net
console-application
msdn
pengguna962206
sumber
sumber
Jawaban:
Karena sudah selesai. Ketika aplikasi konsol telah selesai dieksekusi dan kembali dari
main
metode mereka , jendela konsol terkait secara otomatis ditutup. Ini adalah perilaku yang diharapkan.Jika Anda ingin tetap terbuka untuk keperluan debugging, Anda harus menginstruksikan komputer untuk menunggu penekanan tombol sebelum mengakhiri aplikasi dan menutup jendela.
The
Console.ReadLine
Metode adalah salah satu cara untuk melakukan itu. Menambahkan baris ini ke akhir kode Anda (tepat sebelumreturn
pernyataan) akan menyebabkan aplikasi menunggu Anda untuk menekan tombol sebelum keluar.Sebagai alternatif, Anda dapat memulai aplikasi tanpa debugger dilampirkan dengan menekan Ctrl+ F5dari dalam lingkungan Visual Studio, tetapi ini jelas merugikan mencegah Anda menggunakan fitur debugging, yang mungkin Anda inginkan saat Anda menulis aplikasi.
Kompromi terbaik mungkin untuk memanggil
Console.ReadLine
metode hanya ketika men-debug aplikasi dengan membungkusnya dalam arahan preprocessor. Sesuatu seperti:Anda mungkin juga ingin jendela tetap terbuka jika pengecualian yang tidak tertangkap dilemparkan. Untuk melakukannya, Anda dapat meletakkannya
Console.ReadLine();
difinally
blok:sumber
if (System.Diagnostics.Debugger.IsAttached) Console.ReadLine();
.Alih-alih menggunakan
Anda dapat menjalankan program Anda menggunakan Ctrl+ F5(jika Anda berada di Visual Studio). Kemudian Visual Studio akan menjaga jendela konsol tetap terbuka, sampai Anda menekan tombol.
Catatan: Anda tidak dapat men-debug kode Anda dalam pendekatan ini.
sumber
Ctrl + F5
dilakukan secara berbeda yang cukup cantikStart
lakukan secara berbeda?Saya berasumsi alasan Anda tidak ingin menutupnya dalam mode Debug, adalah karena Anda ingin melihat nilai-nilai variabel dll. Jadi mungkin lebih baik memasukkan titik istirahat pada penutup "}" dari fungsi utama . Jika Anda tidak perlu men-debug, maka Ctrl-F5 adalah opsi terbaik.
sumber
Ini berlaku sama untuk CtrlF5atau F5. Tempatkan segera sebelum akhir
Main
metode.sumber
Console.ReadKey()
untuk tombol apa pun,Console.ReadLine()
menunggu masuk untuk ditekanProgram segera ditutup karena tidak ada yang menghentikannya dari penutupan. Masukkan breakpoint di
return 0;
atau tambahkanConsole.Read();
sebelumreturn 0;
untuk mencegah program dari penutupan.sumber
Saya sedikit terlambat ke pesta, tetapi: di Visual Studio 2019 untuk .NET Core memproyeksikan konsol tidak menutup secara otomatis secara default. Anda dapat mengkonfigurasi perilaku melalui menu Alat → Opsi → Debugging → Umum → Secara otomatis menutup konsol ketika debugging berhenti. Jika jendela konsol Anda secara otomatis ditutup, periksa apakah pengaturan yang disebutkan tidak diatur.
Hal yang sama berlaku untuk proyek konsol gaya baru .NET Framework:
Proyek NET Framework. Gaya lama masih tanpa syarat menutup konsol di akhir (pada Visual Studio 16.0.1).
Referensi: https://devblogs.microsoft.com/dotnet/net-core-tooling-update-for-visual-studio-2019-preview-2/
sumber
Jika Anda ingin aplikasi Anda tetap terbuka, Anda harus melakukan sesuatu agar prosesnya tetap hidup. Contoh di bawah ini adalah yang paling sederhana, untuk diletakkan di akhir program Anda:
Namun, itu akan menyebabkan CPU kelebihan beban, karena itu dipaksa untuk mengulangi tanpa batas.
Pada titik ini, Anda dapat memilih untuk menggunakan
System.Windows.Forms.Application
kelas (tetapi mengharuskan Anda untuk menambahkanSystem.Windows.Forms
referensi):Ini tidak membocorkan CPU dan berhasil.
Untuk menghindari menambahkan
System.Windows.Forms
referensi, Anda dapat menggunakan trik sederhana, yang disebut spin waiting , mengimporSystem.Threading
:Ini juga berfungsi dengan baik, dan pada dasarnya terdiri dari
while
loop dengan kondisi negated yang dikembalikan oleh metode lambda di atas. Mengapa CPU ini tidak kelebihan beban? Anda dapat melihat kode sumber di sini ; bagaimanapun, pada dasarnya menunggu beberapa siklus CPU sebelum iterasi.Anda juga dapat membuat looper pesan, yang mengintip pesan yang tertunda dari sistem dan memproses masing-masing sebelum meneruskan ke iterasi berikutnya, sebagai berikut:
Kemudian, Anda dapat mengulang dengan aman dengan melakukan sesuatu seperti ini:
sumber
Atau, Anda dapat menunda penutupan menggunakan kode berikut:
Perhatikan
Sleep
menggunakan milidetik.sumber
Cara lain adalah menggunakan
Debugger.Break()
sebelum kembali dari metode Utamasumber
Kode selesai, untuk melanjutkan Anda perlu menambahkan ini:
atau
sumber
Gunakan Console.Read (); untuk mencegah program menutup, tetapi pastikan Anda menambahkan
Console.Read();
kode sebelum kembali pernyataan, atau itu akan menjadi kode yang tidak terjangkau.periksa Konsol ini. Baca
sumber
Tambahkan
Read
Metode untuk menampilkan output.sumber
Berikut adalah cara untuk melakukannya tanpa melibatkan
Console
:sumber
Program ditutup segera setelah eksekusi selesai. Dalam hal ini saat Anda
return 0;
. Ini adalah fungsi yang diharapkan. Jika Anda ingin melihat outputnya, jalankan di terminal secara manual atau tunggu di akhir program agar tetap terbuka selama beberapa detik (menggunakan pustaka threading).sumber
ini jawaban async di aplikasi konsol di C #?
apa pun di mana pun di aplikasi konsol tidak pernah digunakan
await
tetapi gunakantheAsyncMethod().GetAwaiter().GetResult();
,contoh
var result = await HttpClientInstance.SendAsync(message);
menjadi
var result = HttpClientInstance.SendAsync(message).GetAwaiter().GetResult();
sumber
jika program Anda mengharuskan Anda menekan enter untuk melanjutkan seperti Anda harus memasukkan nilai dan melanjutkan, kemudian tambahkan double atau int baru dan ketik write sebelum retunr (0); scanf_s ("% lf", & variabel);
sumber
Saya selalu menambahkan pernyataan berikut ke aplikasi konsol. (Buat cuplikan kode untuk ini jika Anda mau)
Melakukan hal ini membantu ketika Anda ingin bereksperimen dengan berbagai konsep melalui aplikasi konsol.
Rkt + F5 akan membuat Konsol tetap tetapi Anda tidak dapat men-debug! Semua aplikasi konsol yang saya tulis di dunia nyata selalu non-interaktif dan dipicu oleh Penjadwal seperti stasiun TWS atau CA Work dan tidak memerlukan sesuatu seperti ini.
sumber
Untuk menyederhanakan apa yang dikatakan orang lain: Gunakan
Console.ReadKey();
.Ini membuatnya jadi program sedang menunggu pengguna untuk menekan tombol normal pada keyboard
Sumber: Saya menggunakannya dalam program saya untuk aplikasi konsol.
sumber
Anda dapat menyelesaikannya dengan cara yang sangat sederhana hanya dengan memohon input. Namun, jika Anda menekan
Enter
maka konsol akan menghilang lagi. Cukup gunakan iniConsole.ReadLine();
atauConsole.Read();
sumber
Tambahkan berikut ini sebelum kembali 0:
Ini mencetak garis untuk menekan tombol untuk menutup jendela. Ini akan menjaga jendela hingga Anda menekan tombol enter. Saya minta siswa saya menambahkannya ke semua program mereka.
sumber
Menurut kekhawatiran saya, jika kita ingin menstabilkan OUTPUT OF CONSOLE APPLICATION, sampai penutupan tampilan keluaran USE, label: setelah MainMethod, dan goto label; sebelum akhir program
Dalam Program.
misalnya:
sumber
goto
pernyataan bahkan diizinkan dalam bahasa C #.