假设以下代码
private AutoResetEvent m_MethodDone = new AutoResetEvent(false);
private void Method1()
{
// Do something
Method2();
}
private void Method2()
{
// All done
m_MethodDone.Set();
}
private void Method3()
{
}
private void Program()
{
Task t = New Task(() => { // Code In Question
m_MethodDone.WaitOne()
Method3();
});
t.Start();
// Do other things.
}
问题
有没有办法“捕获”CLR 事件,无论是来自线程中的事件还是循环?
if(SomeRunTimeThing.LastMethodExecuted.Name == "Method2")
Method3();
为什么
我不想将调用 Hook 写入软件的内部,这是一个可观察的问题(嗯,想法即将到来......)(它实际上观察了 UI 调用模式用于自动化类型功能)。
最佳答案
据我所知,CLR 不支持这种情况。
如果是的话,就会导致各种并发症。例如,请注意,编译器可能内联您的私有(private)方法,因此实际代码可能看起来更像这样:
private void Method1()
{
// Body of Method 1
// Body of Method 2
}
在这种情况下,SomeRunTimeThing.LastMethodExecuted.Name
永远不会采用值 Method2
。 (这也是为什么除了日志记录和调试之外,永远不要使用堆栈跟踪信息进行任何操作的原因。)
关于c# - 判断当前正在执行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14688580/