因为一个奇怪的性能问题,我们目前需要运行一个Windows窗体并强制它像一个控制台项目。这不是一个问题,而且这个工作正常,而第三部分则讨论了性能问题。
当你这样做时,
Console.WriteLine("something")
实际上并没有打印到控制台。
解决方法是添加以下内容(在一堆SO帖子中找到)
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
private static extern bool AttachConsole(int processId);
然后在Main
中调用该方法 AttachConsole(-1);
确定这样可以正常工作,仍然需要查看这是否会导致同样的性能问题,最初促使我们首先使用Windows窗体解决方案TBD。
由于我不想将此代码复制到每个项目(Booooo),我创建了一个custom Attribute并将该代码添加到其中。
public class FormOnConsol : Attribute
{
[DllImport("kernel32.dll", SetLastError = true, ExactSpelling = true)]
public static extern bool AttachConsole(int processId);
public FormOnConsol(int processid = -1)
{
AttachConsole(processid);
}
}
似乎无法弄清楚为何在使用
时无法正常工作 [STAThread]
[FormOnConsol]
static void Main()
{
//some fun code here
//naturally because all code is fun =]
}
非常感谢正确方向的任何一点!
提前致谢!
答案 0 :(得分:3)
只有在查询属性时,才会激活属性的构造函数。在此处查看有关此主题的更多信息:when-is-a-custom-attributes-constructor-run
P.S。对任何活动操作使用属性是不对的。它应该仅用于声明目的。