PingCompletedEventArgs 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
PingCompleted 이벤트에 대한 데이터를 제공합니다.
public ref class PingCompletedEventArgs : System::ComponentModel::AsyncCompletedEventArgs
public class PingCompletedEventArgs : System.ComponentModel.AsyncCompletedEventArgs
type PingCompletedEventArgs = class
inherit AsyncCompletedEventArgs
Public Class PingCompletedEventArgs
Inherits AsyncCompletedEventArgs
- 상속
예제
다음 코드 예제에서는 ICMP 에코 요청을 비동기적으로 보내는 방법을 보여 줍니다.
#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 );
}
}
using System;
using System.Text;
using System.Net;
using System.Net.NetworkInformation;
using System.ComponentModel;
using System.Threading;
namespace Examples.System.Net.NetworkInformation.PingTest
{
public class PingExample
{
public static void Main (string[] args)
{
if (args.Length == 0)
throw new ArgumentException ("Ping needs a host or IP Address.");
string who = args[0];
AutoResetEvent waiter = new AutoResetEvent (false);
Ping pingSender = new Ping ();
// When the PingCompleted event is raised,
// the PingCompletedCallback method is called.
pingSender.PingCompleted += new PingCompletedEventHandler (PingCompletedCallback);
// Create a buffer of 32 bytes of data to be transmitted.
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
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 = new 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.");
}
private static 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.
((AutoResetEvent)e.UserState).Set ();
}
// If an error occurred, display the exception to the user.
if (e.Error != null)
{
Console.WriteLine ("Ping failed:");
Console.WriteLine (e.Error.ToString ());
// Let the main thread resume.
((AutoResetEvent)e.UserState).Set();
}
PingReply reply = e.Reply;
DisplayReply (reply);
// Let the main thread resume.
((AutoResetEvent)e.UserState).Set();
}
public static void DisplayReply (PingReply reply)
{
if (reply == null)
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);
}
}
}
}
설명
이 클래스의 인스턴스는 호출이 완료될 PingCompletedEventHandler 때 호출되는 메서드에 SendAsync 전달됩니다. 메서드는 SendAsync ICMP(Internet Control Message Protocol) 에코 요청을 비동기적으로 보내고 해당 ICMP 에코 응답 메시지를 기다립니다. 속성은 Reply ICMP 에코 요청의 결과를 포함합니다.
속성
Cancelled |
비동기 작업이 취소되었는지 여부를 나타내는 값을 가져옵니다. (다음에서 상속됨 AsyncCompletedEventArgs) |
Error |
비동기 작업 중 발생한 오류를 나타내는 값을 가져옵니다. (다음에서 상속됨 AsyncCompletedEventArgs) |
Reply |
ICMP(Internet Control Message Protocol) 에코 요청 메시지를 보낼 시도를 설명하는 데이터를 포함하는 개체를 가져와서 해당 ICMP 에코 응답 메시지를 받습니다. |
UserState |
비동기 작업의 고유 식별자를 가져옵니다. (다음에서 상속됨 AsyncCompletedEventArgs) |
메서드
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
RaiseExceptionIfNecessary() |
비동기 작업에 실패한 경우 사용자가 제공한 예외를 발생시킵니다. (다음에서 상속됨 AsyncCompletedEventArgs) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
.NET