c# - 判断当前正在执行的方法

标签 c# events clr autoresetevent

假设以下代码

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/

相关文章:

c# - 延迟绘制 WindowsFormsHost?

c# - 在 C# 中无限/定期执行代码的最佳实践

apache-flex - 单元测试 Flex 事件处理程序

c# - CLR 如何在内部将 Double/Single 转换为 Decimal?

c# - 是什么允许 .NET 任务在等待 I/O 完成后继续执行?

c# - 如何|封闭变量存储在哪里?

c# - 我在使用托管服务身份对受 AAD 保护的 Azure 应用服务进行身份验证时遇到问题

c# - 未经客户端身份验证方案 NTLM 授权

c# - ReSharper 重新排序 String.Format() 参数

jquery - 使用 jquery 获取所有绑定(bind)事件