DOBON.NET DOBON.NETプログラミング掲示板過去ログ

IPアドレスからホスト名で?

分類:[.NET]

初めて投稿します。 (よろしくお願いします)

Windowsフォームで、ボタンを押した時にIPアドレスからホスト名を連続して取得する場合、下記のように作ってみました。

For J = 1 To i
Dim IPadrs As New System.Net.IPHostEntry()
Try
'<下記2行のうちどちらかを使用>
IPadrs = System.Net.Dns.GetHostByAddress(IP_ADDRESS(J))
'// IPadrs = System.Net.Dns.Resolve(IP_ADDRESS(J))
s = IPadrs.HostName

Catch ex As Exception
s="HostName Not Found"
End Try

me.ProgressBar1.Value = J
me.ProgressBar1.Refresh
Next

実行時、「何もしない」(眺めているだけ)と、問題ないのですが、
このフォームをクリックしたり、他のアプリケーションを触って戻ってみると、
プログレスバーが更新されず、フォームの上にマウスポインターを持って行くと、
砂時計マークになったままです。
(処理は行われており、最後まで行きます)

そこで、Catch の次の行に
messagebox.show("何か") を入れて実行してみると、このフォームをクリックしたり、他のアプリケーションを触っても、messageboxが現れて、「OK」ボタンクリックで、プログレスバーが更新されます。(当然でしょうが・・・)

他にも、いろいろと試したり、調べたりしたのですが、実行中に他の事を行うと、
砂時計マークのままで、プログレスバーも更新されません。
私のレベルでは、どうにも解決できないです。

どなたか、アドバイスをお願いします。 ヨロシク m(_ _)m
■No595に返信(arachanさんの記事)

こんばんは、arachanさん。ピラルクです。

私の環境(VS2002-1.0SP2)で提示されたコードを試したところ、
少なくともスクロールバーは進むので、何がどうなって欲しい
のかがいまいちよく分からないのですが、以下のどれかにて解
決しますでしょうか?

・ループ内に Me.Refresh() も入れてみる
・ループ内に Application.DoEvents() を入れてみる
・System.Net.Dns.BeginResolve()の非同期メソッドに変えてみる
・この処理全体を別スレッドに分けてみる
■No611に返信(ピラルクさんの記事)
ピラルクさん、ありがとうございます。

> ・ループ内に Me.Refresh() も入れてみる
> ・ループ内に Application.DoEvents() を入れてみる
> ・System.Net.Dns.BeginResolve()の非同期メソッドに変えてみる
> ・この処理全体を別スレッドに分けてみる

試してみます。
■No611に返信(ピラルクさんの記事)
arachanです。 ありがとうございました。 解決しました。

Application.DoEvents() を追加したところ、問題解決しました。

1年ぶりにVB.NETを触ったら、すっかり忘れていました。 (--;)
レベル★☆☆☆☆に戻りました・・・・・
お騒がせしました。

P.S.
ルーターのログからIPアドレスを抽出して、ホスト名を自動的に解決して
CSVファイルに変換するようなものを作っている最中でした。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板