2016-10-13 64 views
0

我有一个WinForms应用程序,我想跟踪按钮被点击。我想我可以在每个函数的开始处放置一个类似于Console.WriteLine("FUNCTION_NAME");的东西(当然,FUNCTION_NAME替换为实际函数的名称)。我的问题是:有更好的方法吗?某种编程方式来获取函数名称,并在函数运行时用它做些什么?记录是否输入任何功能

+0

作为一个选项看看这篇文章:[监视Windows窗体应用程序](http://stackoverflow.com/a/39018993/3110834) –

回答

0

有一种方法。使用CallerMemberNameAttribute。例如: https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute(v=vs.110).aspx#Anchor_7

编辑:

这里是AOP的在C#的示例: https://msdn.microsoft.com/en-us/magazine/dn574804.aspx

但是性能会严重下降。

+0

这看起来不错!但是,我是否仍然必须在每一个我想使用它的函数中放入一行? – derekantrican

+0

C#不支持面向方面的编程,所以不幸的是,这是不可能的。嗯,确切地说,这在技术上是可行的,但是你的应用运行速度会慢1000倍。 –

0

通常,在WPF/MVVM中,我们将有一个记录器的基类,它将使用CallerMemberNameAttribute,所以您不需要弄清楚调用者。
如果您在课堂上创建记录器,您可以使用记录器(NLog,Log4net等),而不是将其写出,它也会自动完成部分工作。

这是一段代码。请注意,这是自动更改通知完成,但您可以使用相同的为您的目的:

[NotifyPropertyChangedInvocator] 
protected override void RaisePropertyChanged([CallerMemberName]string property = "") 
{ 
    base.RaisePropertyChanged(property); 
} 

只是改变的函数的名称很明显,而且你在它需要的东西。

相关问题