Export (0) Print
Expand All
Expand Minimize

PingCompletedEventHandler Delegate

Represents the method that will handle the PingCompleted event of a Ping object.

Namespace:  System.Net.NetworkInformation
Assembly:  System (in System.dll)

public delegate void PingCompletedEventHandler(
	Object^ sender, 
	PingCompletedEventArgs^ e
)

Parameters

sender
Type: System::Object

The source of the PingCompleted event.

e
Type: System.Net.NetworkInformation::PingCompletedEventArgs

A PingCompletedEventArgs object that contains the event data.

User data that is specified in a SendAsync call is available to the method invoked by this delegate in the UserState property.

The following code example demonstrates specifying a PingCompletedEventHandler to respond to a PingCompleted event.

#using <System.dll>

using namespace System;
using namespace System::Text;
using namespace System::Net;
using namespace System::Net::NetworkInformation;
using namespace System::ComponentModel;
using namespace System::Threading;
void PingCompletedCallback( Object^ sender, PingCompletedEventArgs^ e );
void DisplayReply( PingReply^ reply );
int main()
{
   array<String^>^args = Environment::GetCommandLineArgs();
   if ( args->Length == 1 )
      throw gcnew ArgumentException( "Ping needs a host or IP Address." );

   String^ who = args[ 1 ];
   AutoResetEvent^ waiter = gcnew AutoResetEvent( false );

   Ping ^ pingSender = gcnew Ping;

   // When the PingCompleted event is raised, 
   // the PingCompletedCallback method is called.
   pingSender->PingCompleted += gcnew PingCompletedEventHandler( PingCompletedCallback );

   // Create a buffer of 32 bytes of data to be transmitted.
   String^ data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
   array<Byte>^buffer = Encoding::ASCII->GetBytes( data );

   // Wait 12 seconds for a reply. 
   int timeout = 12000;

   // Set options for transmission: 
   // The data can go through 64 gateways or routers 
   // before it is destroyed, and the data packet 
   // cannot be fragmented.
   PingOptions ^ options = gcnew PingOptions( 64,true );
   Console::WriteLine( "Time to live: {0}", options->Ttl );
   Console::WriteLine( "Don't fragment: {0}", options->DontFragment );

   // Send the ping asynchronously. 
   // Use the waiter as the user token. 
   // When the callback completes, it can wake up this thread.
   pingSender->SendAsync( who, timeout, buffer, options, waiter );

   // Prevent this example application from ending. 
   // A real application should do something useful 
   // when possible.
   waiter->WaitOne();
   Console::WriteLine( "Ping example completed." );
}


void PingCompletedCallback( Object^ /*sender*/, PingCompletedEventArgs^ e )
{

   // If the operation was canceled, display a message to the user. 
   if ( e->Cancelled )
   {
      Console::WriteLine( "Ping canceled." );

      // Let the main thread resume.  
      // UserToken is the AutoResetEvent object that the main thread  
      // is waiting for.
      (dynamic_cast<AutoResetEvent^>(e->UserState))->Set();
   }


   // If an error occurred, display the exception to the user. 
   if ( e->Error != nullptr )
   {
      Console::WriteLine( "Ping failed:" );
      Console::WriteLine( e->Error->ToString() );

      // Let the main thread resume. 
      (dynamic_cast<AutoResetEvent^>(e->UserState))->Set();
   }

   PingReply ^ reply = e->Reply;
   DisplayReply( reply );

   // Let the main thread resume.
   (dynamic_cast<AutoResetEvent^>(e->UserState))->Set();
}


void DisplayReply( PingReply ^ reply )
{
   if ( reply == nullptr )
      return;

   Console::WriteLine( "ping status: {0}", reply->Status );
   if ( reply->Status == IPStatus::Success )
   {
      Console::WriteLine( "Address: {0}", reply->Address->ToString() );
      Console::WriteLine( "RoundTrip time: {0}", reply->RoundtripTime );
      Console::WriteLine( "Time to live: {0}", reply->Options->Ttl );
      Console::WriteLine( "Don't fragment: {0}", reply->Options->DontFragment );
      Console::WriteLine( "Buffer size: {0}", reply->Buffer->Length );
   }
}

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Show:
© 2015 Microsoft