我希望每秒都能获得正在运行的功能名称。我试过这段代码:
public static void DisplayTimeEvent(object source, ElapsedEventArgs e)
{
// code here will run every second
//Output is DisplayTimeEvent but I want it to print Main
Console.WriteLine(GetCurrentMethod());
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static string GetCurrentMethod()
{
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(1);
return sf.GetMethod().Name;
}
//main function
Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
myTimer.Interval = 1000;
myTimer.Start();
Console.ReadLine();
上面的代码打印DisplayTimeEvent
。如何使其打印Main(或当时正在执行的任何函数主线程)?
答案 0 :(得分:0)
您的线程打印DisplayTimeEvent
因为Timer.Elapsed
事件附加到该回调,而在您的回调中,您只检查当前线程的堆栈跟踪。
如果您想在流程中调查其他线程(包括" 主线程"),可以尝试使用System.Diagnostics命名空间,如{{3 }}
答案 1 :(得分:0)
是的,应该是这样......给你方法的来电者姓名。不要以为你可以像你想象的那样得到当前的执行方法。如果方法调用是异步操作或线程完全操作,该怎么办?
仅供参考,从.NET 4.5开始,还有一个选项是使用CallerMemberNameAttribute
public static void DisplayTimeEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("Test....");
GetCurrentMethod();
}
public static string GetCurrentMethod([System.Runtime.CompilerServices.CallerMemberName] string memberName = "")
{
System.Diagnostics.Trace.WriteLine("member name: " + memberName);
}