导入并运行外部方法杠杆c#自定义属性

时间:2014-05-27 13:47:09

标签: c# attributes

因为一个奇怪的性能问题,我们目前需要运行一个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 =]
    }

非常感谢正确方向的任何一点!

提前致谢!

1 个答案:

答案 0 :(得分:3)

只有在查询属性时,才会激活属性的构造函数。在此处查看有关此主题的更多信息:when-is-a-custom-attributes-constructor-run

P.S。对任何活动操作使用属性是不对的。它应该仅用于声明目的。