DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

ネットワークインターフェイスのIPアドレスが変更されたことを知る

注意:ここで紹介している方法は、.NET Framework 2.0以降でのみ有効です。

ネットワークインターフェイスのIPアドレスが変更されると、NetworkChangeクラスのNetworkAddressChangedイベントが発生します。なお、NetworkAddressChangedイベントハンドラはメインスレッドとは別のスレッドで呼び出されるため、このイベントハンドラからコントロールにアクセスするには、Invokeメソッドを使用する必要があります。

以下に例を示します。この例では、ネットワークインターフェイスのIPアドレスが変更されたときにフォームのタイトルバーにメッセージを表示しています。このコードはフォームクラス(Form1クラス)に記述されているものとします。

VB.NET
コードを隠すコードを選択
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As EventArgs) Handles MyBase.Load
    'NetworkAddressChangedイベントハンドラの追加
    AddHandler _
        System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged, _
        AddressOf NetworkChange_NetworkAddressChanged
End Sub

'ネットワークインターフェイスのIPアドレスが変更された
Private Sub NetworkChange_NetworkAddressChanged( _
        ByVal sender As Object, ByVal e As EventArgs)
    'Invokeが必要か確認し、必要であればInvokeを呼び出す
    If Me.InvokeRequired Then
        Dim dlgt As New _
            System.Net.NetworkInformation.NetworkAddressChangedEventHandler( _
            AddressOf NetworkChange_NetworkAddressChanged)
        Me.Invoke(dlgt, New Object() {sender, e})
        Return
    End If

    Me.Text = "ネットワークインターフェイスのIPアドレスが変更されました:" + _
        DateTime.Now.ToString()
End Sub
C#
コードを隠すコードを選択
//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, EventArgs e)
{
    //NetworkAddressChangedイベントハンドラの追加
    System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged +=
        new System.Net.NetworkInformation.NetworkAddressChangedEventHandler(
            NetworkChange_NetworkAddressChanged);
}

//ネットワークインターフェイスのIPアドレスが変更された
private void NetworkChange_NetworkAddressChanged(object sender, EventArgs e)
{
    //Invokeが必要か確認し、必要であればInvokeを呼び出す
    if (this.InvokeRequired)
    {
        System.Net.NetworkInformation.NetworkAddressChangedEventHandler dlgt =
            new System.Net.NetworkInformation.NetworkAddressChangedEventHandler(
                NetworkChange_NetworkAddressChanged);
        this.Invoke(dlgt, new object[] { sender, e });
        return;
    }

    this.Text = "ネットワークインターフェイスのIPアドレスが変更されました:" +
        DateTime.Now.ToString();
}

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。