是否可以在基于表单的C#应用程序中添加控制台? 目前我做的事情是
Console.WriteLine("testing");
它出现在VS2010的输出窗口中。 我想知道是否可以将控制台连接到我的Windows窗体应用程序。所以输出显示在控制台中。
编辑: 看起来我的第一个问题有点误导,并没有明确说明我想要完成的任务。我刚刚使用
为我的应用程序添加了一个控制台 [DllImport("kernel32")]
static extern int AllocConsole();
然而,我真正想要的是显示的log4net控制台appender的输出 那个没有发生的控制台。 我的appender的xml是
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="INFO" />
<foreColor value="White" />
<backColor value="Red, HighIntensity" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%class %date - %message %newline" />
</layout>
</appender>
现在我喜欢
log.info("Some log");
它仍然不会在新添加的控制台窗口中显示它。关于我如何做到这一点的任何建议?
答案 0 :(得分:3)
只需将其丢弃,请确保在加载log4net配置之前AllocConsole()
。我尝试做了类似于你的问题的问题,并且在将我的电话转移到AllocConsole
之前遇到了同样的问题。一旦我移动它,log4net就会自动写入我分配的控制台。
基本上......(并且记得要执行此处未包括的所有常规错误检查)...
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace SampleApp
{
class Program
{
[DllImport("kernel32.dll", SetLastError=true, CallingConvention=CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool AllocConsole();
[DllImport("kernel32.dll", SetLastError=true, CallingConvention=CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool FreeConsole();
[STAThread]
private static void Main(string[] args)
{
// (1) Make sure we have a console to use.
Program.AllocConsole();
try {
// (2) Tell log4net to configure itself according to our app.config data.
log4net.Config.XmlConfigurator.Configure();
// (3) Usual WinForms startup code here.
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new SampleApp.Form1());
} catch ( Exception ) {
// WAT!
}
// (4) Remember to release the console before we exit.
Program.FreeConsole();
}
}
}
不是100%肯定为什么它会分配控制台的时间有所不同,但这确实解决了我的问题。
答案 1 :(得分:2)
只需将您的项目设置为控制台应用程序,然后从控制台应用程序创建/显示表单,而不是相反。