1
[ServiceBehavior(InstanceContextMode.PerSession,
    UseSynchronizationContext=false,
    ConcurrencyMode = ConcurrencyMode.Single)]
class IMyService : IMyService
{
    System.Timers.Timer timer;
    ....

    void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        // I want to arrive here on the service thread
    }
}

我的服务的参数如上。

我在某个服务状态对象中使用 System.Timers.Timer,我希望 Timer.Elapsed 事件在服务线程上回火。使用 SynchronizationContext 我可以使用以下方法实现此目的:

context.Post(SendOrPostCallback callback, object state)

我可以把它放在 Timer.Elapsed 事件中,回调将在我想要的服务线程上调用。

如果没有 SynchronizationContext,我显然需要使用 ISynchronizeInvoke 对象设置 Timer.SynchronizingObject,以便相应地编组经过的事件。但是,我在哪里可以从 WCF 服务中获取 ISynchronizeInvoke 对象?它有一个吗?

4

0 回答 0