0

我使用 TraceEventSession 来记录我的事件。我有两个功能开始和停止。Start 启动会话并创建在 Stop 中调用的操作。

Action StopAction;
void Start() {
    var session = new TraceEventSession(place, path);
    Guid id = TraceEventProviders.GetEventSourceGuidFromName(MyEventSourceName);
    session.EnableProvider(id);
    StopAction = () => {
       session.DisableProvider(id);
       session.Stop(true);
       ... Processing logs ...
       session.Dispose();
    };
}

void Stop() {
    StopAction();
}

当我运行这段代码

Start();
...Some code 1...
Stop();

一切正常,但是当我运行这段代码时

Start();
...Some code 1...
Stop();
...Some long code...
Start();
...Some code 2...
Stop();

session 不收集 MyEventSourceName 的信息。首先我认为那是因为会话没有处理,但...Some long code持续了很长时间,但问题是一样的。

只有当我运行这样的代码时,程序才能正常工作:

Start();
...Some code 1...
Stop();
...Some long code...
Start();
Thread.Sleep(1000);
...Some code 2...
Stop();

我不能调用Thread.Sleep,在调用Start之后,而且很奇怪第一个Start工作正常,第二个Start总是失败。这就是为什么我感兴趣它为什么会发生,有没有办法不调用 Thread.Sleep。

4

0 回答 0