[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对象?它有吗?