Untuk langsung terjebak, contoh yang sangat mendasar:
using System;
using System.Windows.Forms;
class test
{
static void Main()
{
Console.WriteLine("test");
MessageBox.Show("test");
}
}
Jika saya mengkompilasi ini dengan opsi default (menggunakan csc pada command line), seperti yang diharapkan, itu akan dikompilasi ke aplikasi konsol. Juga, karena saya mengimporSystem.Windows.Forms
, itu juga akan menampilkan kotak pesan.
Sekarang, jika saya menggunakan opsi /target:winexe
, yang saya pikir sama dengan memilihWindows Application
dari dalam opsi proyek, seperti yang diharapkan saya hanya akan melihat Kotak Pesan dan tidak ada output konsol.
(Bahkan, saat diluncurkan dari baris perintah, saya dapat mengeluarkan perintah berikutnya bahkan sebelum aplikasi selesai).
Jadi, pertanyaan saya adalah - Saya tahu Anda dapat memiliki "windows" / membentuk output dari aplikasi konsol, tetapi apakah ada juga untuk menunjukkan konsol dari aplikasi Windows?
Jawaban:
ini harus bekerja.
sumber
>
untuk mengarahkan ulang output saya mendapatkan jendela konsol terpisah dan nol output dalam file saya.Mungkin ini terlalu sederhana ...
Buat proyek Windows Form ...
Kemudian: Properti Proyek -> Aplikasi -> Jenis Output -> Aplikasi Konsol
Kemudian dapat membuat Konsol dan Formulir berjalan bersama, berfungsi untuk saya
sumber
>
. Namun, saya berharap untuk solusi yang akan menjelaskan bagaimana menjalankan sebagai "Aplikasi Konsol" hanya beberapa waktu (yaitu untuk secara terprogram mengaktifkan apa pun yang mengubah pengaturan Visual Studio misterius ini tidak). Adakah yang tahu cara kerjanya di bawah tenda?Jika Anda tidak khawatir tentang membuka konsol sesuai perintah, Anda dapat masuk ke properti untuk proyek Anda dan mengubahnya ke Aplikasi Konsol
.
Ini masih akan menunjukkan formulir Anda serta muncul jendela konsol. Anda tidak bisa menutup jendela konsol, tetapi berfungsi sebagai pencatat sementara yang bagus untuk debugging.
Ingatlah untuk mematikannya sebelum Anda menggunakan program ini.
sumber
Anda dapat menelepon
AttachConsole
menggunakan pinvoke untuk mendapatkan jendela konsol terpasang ke proyek WinForms: http://www.csharp411.com/console-output-from-winforms-application/Anda mungkin juga ingin mempertimbangkan Log4net ( http://logging.apache.org/log4net/index.html ) untuk mengkonfigurasi keluaran log dalam konfigurasi yang berbeda.
sumber
Ini bekerja untuk saya, untuk menyalurkan output ke file. Panggil konsol dengan
Tambahkan kode ini ke aplikasi Anda.
Saya menemukan kode ini di sini: http://www.csharp411.com/console-output-from-winforms-application/ Saya pikir layak untuk mempostingnya di sini juga.
sumber
AttachConsole(ATTACH_PARENT_PROCESS)
saya mendapatkan output konsol tetapi mengarahkannya kembali pada baris perintah dengan>
tidak bekerja. Ketika saya mencoba jawaban ini, saya tidak bisa mendapatkan output apa pun, baik di konsol atau di file.Pada dasarnya ada dua hal yang bisa terjadi di sini.
Output konsol Adalah mungkin bagi program winforms untuk menempelkan dirinya sendiri ke jendela konsol yang membuatnya (atau ke jendela konsol yang berbeda, atau memang ke jendela konsol baru jika diinginkan). Setelah terpasang ke konsol jendela Console.WriteLine () dll berfungsi seperti yang diharapkan. Salah satu yang perlu dari pendekatan ini adalah bahwa program mengembalikan kontrol ke jendela konsol dengan segera, dan kemudian melanjutkan menulis ke sana, sehingga pengguna juga dapat mengetik di jendela konsol. Anda dapat menggunakan mulai dengan parameter / tunggu untuk menangani ini saya pikir.
Tautan untuk memulai sintaks Perintah
Keluaran konsol yang dialihkan Ini adalah ketika seseorang mengirimkan output dari program Anda ke tempat lain, mis.
aplikasi Anda> file.txt
Melampirkan ke jendela konsol dalam hal ini secara efektif mengabaikan perpipaan. Untuk membuat ini bekerja, Anda dapat memanggil Console.OpenStandardOutput () untuk mendapatkan pegangan ke aliran yang harus dikirim melalui pipa. Ini hanya berfungsi jika output disalurkan, jadi jika Anda ingin menangani kedua skenario, Anda perlu membuka output standar dan menulis ke sana dan melampirkan ke jendela konsol. Ini berarti bahwa output dikirim ke jendela konsol dan ke pipa tetapi solusi terbaik yang bisa saya temukan. Di bawah kode yang saya gunakan untuk melakukan ini.
sumber
Console.WriteLine
untuk bukannya memanggil yang baruWriteLine
didefinisikan di atas. Meskipun saya mencoba bahwa saya tidak dapat dengan kode ini untuk mendapatkan apa pun diarahkan ke file ketika menjalankan aplikasi pada baris perintah dan mengarahkan>
ke file.Console.WriteLine
adalah praktik yang baik, karena memungkinkan Anda untuk menguji, dan dengan mudah mengubah tempat-tempat yang Anda masuki (misalnya, Anda mungkin ingin mulai masuk ke layanan logging berbasis cloud seperti PaperTrail, atau apa pun )StreamWriter _stdOutWriter;
Buat Aplikasi Formulir Windows, dan ubah tipe output ke Konsol.
Ini akan menghasilkan konsol dan formulir untuk dibuka.
sumber
sumber
sumber
StandardHandle : uint
salah di sini ... seharusnya IntPtr dapat berfungsi pada x86 dan x64Anda dapat setiap saat beralih di antara jenis aplikasi, ke konsol atau windows. Jadi, Anda tidak akan menulis logika khusus untuk melihat stdout. Juga, ketika menjalankan aplikasi dalam debugger, Anda akan melihat semua stdout di jendela output. Anda mungkin juga menambahkan breakpoint, dan pada breakpoint properties ubah "When Hit ...", Anda bisa menampilkan pesan, dan variabel apa saja. Anda juga dapat memeriksa / menghapus centang "Lanjutkan eksekusi", dan breakpoint Anda akan menjadi berbentuk persegi. Jadi, pesan breakpoint tanpa mengubah apa pun dalam aplikasi di jendela output debug.
sumber
Mengapa tidak tinggalkan saja sebagai aplikasi Window Forms, dan buat formulir sederhana untuk meniru Konsol. Bentuknya dapat dibuat agar terlihat seperti Konsol layar-hitam, dan langsung merespons ke tombol tekan. Kemudian, dalam file program.cs, Anda memutuskan apakah Anda perlu menjalankan formulir utama atau ConsoleForm. Sebagai contoh, saya menggunakan pendekatan ini untuk menangkap argumen baris perintah di file program.cs. Saya membuat ConsoleForm, awalnya menyembunyikannya, lalu meneruskan string baris perintah ke fungsi AddCommand di dalamnya, yang menampilkan perintah yang diizinkan. Akhirnya, jika pengguna memberi -h atau -? perintah, saya memanggil .Show on the ConsoleForm dan ketika pengguna menekan salah satu tombol di atasnya, saya mematikan program. Jika pengguna tidak memberikan -? perintah, saya menutup ConsoleForm tersembunyi dan Jalankan formulir utama.
sumber