我们开发了一个非常适合 WinForms 的 .Net 组件。该组件使用 aSynchronizationContext
从底层线程编组到 UI 线程引发事件(当然组件会WindowsFormsSynchronizationContext
自动获取并使用它将事件发布到应用程序的 UI 线程)。
现在我们要创建一个重用这个组件的 nt 服务。由于 Windows 服务不SynchronizationContext
自动提供,我认为我们可以使用AsyncOperationManager
(和它的SynchronizationContext
)来将在该组件的底层线程中触发的所有事件编组到单个处理器线程。这是一个好方法吗?
在我的测试中,我使用AsyncOperationManager.CreateOperation(null);
来自不同线程的调用来检查发布的异步操作的行为(一个执行MyService.OnStart()
方法......和另一个我在我的服务中运行的内部处理线程)。令我惊讶的是,发布的异步操作的线程 ID 始终是执行该MyService.OnStart()
方法的线程 ID,因此可能是 SCM 线程。
MSDN 上没有关于此的文档,但我认为调用的线程AsyncOperationManager.CreateOperation
将是异步操作将被编组到的线程。
有人可以在这里阐明一下吗?AsyncOperationManager
另外,您会发现我在 Windows 服务中使用它的意图有什么问题吗?还有哪些方法?