private async void OnServerCustomValidationRequested(StreamWebSocket sender, WebSocketServerCustomValidationRequestedEventArgs args) { // In order to call async APIs in this handler, you must first take a deferral and then // release it once you are done with the operation. The "using" statement // ensures that the deferral completes when control leaves the block. bool isValid; using (Deferral deferral = args.GetDeferral()) { // Get the server certificate and certificate chain from the args parameter. isValid = await MainPage.AreCertificateAndCertChainValidAsync(args.ServerCertificate, args.ServerIntermediateCertificates); if (!isValid) { args.Reject(); } } // Continue on the UI thread so we can update UI. var task = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { if (isValid) { AppendOutputLine("Custom validation of server certificate passed."); } else { AppendOutputLine("Custom validation of server certificate failed."); } }); }