2016-10-13 62 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); 
} 

只是改變的函數的名稱很明顯,而且你在它需要的東西。

相關問題