2013-02-13 94 views
1

是否可以将控制台添加到基于表单的C#应用​​程序? 目前,当我这样做将控制台appender添加到log4net中的窗体窗体

Console.WriteLine("testing"); 

它出现在VS2010的输出窗口。 我想知道它是否可能将控制台连接到我的Windows窗体应用程序。因此,输出显示在控制台中。

编辑: 看起来像我的第一个问题有点误导,它并没有完全指定我想要完成的。我只是增加了一个控制台来使用

[DllImport("kernel32")] 
    static extern int AllocConsole(); 

我的应用程序不过是我真正想要的是在 该控制台未发生显示log4net的控制台附加目的地的输出。 我的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"); 

它仍然没有在新添加的控制台窗口中显示。有关我如何做到这一点的任何建议?

+1

看看这个链接。 [控制台窗口中窗体应用程序] [1] [1]:http://stackoverflow.com/questions/472282/show-console-in-windows-application – Tabish 2013-02-13 21:19:44

回答

2

只需使您的项目成为控制台应用程序,然后从控制台应用程序创建/显示窗体而不是其他方式。

+0

如果你这样做,您将需要确保该窗口在STA上实例化并运行。 – sudarsanyes 2014-09-09 08:21:16

3

只是把它扔在那里,要确保你AllocConsole()之前你加载你的log4net的配置。我尝试做类似于您的问题的问题,并在将我的呼叫转至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%肯定它为什么有差别当控制台分配,但这确实为我解决了这个问题。

+0

这也适用于我。即使我在AllocConsole之前配置了log4net,我仍然可以正常使用ConsoleAppender,但是一旦我尝试使用ColoredConsoleAppender,它将只能在AllocConsole重定向完成并重定向标准输出之后完成配置。 – 2014-08-06 12:39:55