0

我们开发了一个非常适合 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 服务中使用它的意图有什么问题吗?还有哪些方法?

4

1 回答 1

0

我创建了自己的线程模型,该模型由一个处理器线程组成,该线程从其他线程获取请求,然后创建回响应。

于 2013-12-20T16:15:15.350 回答