SmtpClient client = new SmtpClient(); { client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); try { client.SendCompleted += delegate { client.Dispose(); lock (numRemainingLock) { if (--numRemaining == 0) { waitHandle.Set(); } } }; client.SendAsync(msg, userState); // Send our email. } catch (Exception) { msg.Dispose(); // throw; } } }