各位前輩們好
由於撰寫程式時,會需要印出變數值或者字串,以便查看程式是否運作正確。
在VS2010時,使用如下程式碼,是可以正常運作的。
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
public Form1()
{
InitializeComponent();
AllocConsole();
Console.WriteLine("11");
}
可是在VS2017,上面的程式碼則失效,Google大神後有測試一些程式碼,還是無法正常輸出資料,最後我只能改用Debug,而且是在停止偵錯後,才會在下方"輸出"視窗看得到結果。
Debug.WriteLine("Test");
請問前輩們有遇到一樣的狀況嗎? 那要怎麼解呢? 或者有其他更好的方法可以教學呢?
謝謝!
補上偵錯 → 輸出視窗的畫面
喔我找到原因了
你專案的輸出類型要改成主控台才會有訊息
會變成下面這樣
非常感謝Homura大的協助,這篇回覆是正解無誤。不過請問從"Windows 應用程式"改為"主控台應用程式"會有什麼差別嗎?另外,是否有更好的Debug方式呢? 還是說我這種方式也可以?
不過請問從"Windows 應用程式"改為"主控台應用程式"會有什麼差別嗎?
這個我就不清楚了
如果只是要Debug還是使用中斷點,程式執行到那邊區域變數可以看到目前變數狀況,或是滑鼠指到變數也能看到,即時運算視窗也行
好的,我學習了,非常感謝您的協助!
我是用 Windows應用程式 也可以耶,
不過我是用2015的,
試看看2017...
你那是WinForm吧,
我不知道你VS 2010也是用WinForm嗎?
通常Console.WriteLine是用在Console模式,
雖然WinForm也可以開Console視窗,
但是就會變成有一個WinForm的視窗,
加上一個Console的視窗.
是的,我在VS 2010也是用WinForm,平時不用就會把AllocConsole();註解,要用時才會取消註解。
2010我不知道
2015我是這樣寫的
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();
[DllImport("Kernel32")]
public static extern void FreeConsole();
但是我發現把下面的FreeConsole去掉好像也是會跑出視窗,
這個就沒研究了...
另外你可以用
//TODO: 備註內容
加入工作清單
到時候就不會忘記改了
小魚大,我測試您的程式碼,結果還是一樣,有跳出Console視窗,但卻沒有印出任何資料。
所以是想輸出到跳出的Console視窗裡嗎?
對阿,這樣我就不用等到程式執行結束,才知道結果。
b7307024
怎麼不拉個多行TextBox 把資料塞進去就好?
不過Debug方式很多,
Console是一種,
中斷點是一種,
紀錄Log是一種,(上線後只能用這種)
其他的留待你自己去尋找...