我使用 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。