ServerAgent.WaitHandle property

Lync 2013

Internal handle used to signal that there is pending input from the SIP server that the server agent needs to process.

Namespace:  Microsoft.Rtc.Sip
Assembly:  ServerAgent (in ServerAgent.dll)

public WaitHandle WaitHandle { get; }

Property value

Type: System.Threading.WaitHandle

Applications should wait on this handle, and whenever it is signaled, should call [ServerAgent.ProcessEvent()]. This mechanism allows applications to control the concurrency model. For example, applications can queue up work items using the [ThreadPool] class.

The following example demonstrates the use of a wait handle when queuing work items in a thread pool.

public void LCServerEventHandler(ServerAgent sa)
{
   ManualResetEvent autoResetEvent = new ManualResetEvent(false);
   WaitHandle[] handleArray = new WaitHandle[] {
                                 myAppServerAgent.WaitHandle,
                                 manualResetEvent
                              };

   WaitCallback waitCallback = new WaitCallback(myAppServerAgent.ProcessEvent);

   while (true)
   {
      int signaledEvent = WaitHandle.WaitAny(handleArray);

      if (signaledEvent == 0)  // The server event wait handle (index = 0) in handleArray was signaled
      {

          // Schedule a worker thread to process the server event
          try
          {
             if (!ThreadPool.QueueUserWorkItem(waitCallBack))
             {
                 Console.WriteLine("QueueUserWorkItem fails, quitting.");
                 return;
             }

          }
          catch (Exception e)
          {
             Console.WriteLine("Unexpected exception: {0}\n{1}",
                               e.Message,
                               e.StackTrace);
          }
       }
       else // Manual reset event handle (index = 1) in handle array was signaled
       {
          Console.WriteLine("Quit handle signaled, worker will quit now\n");
          break;
       }
   }
}

Show: