複数のラベルを持つ GroupBox があるとします。これらのラベルには、さまざまな IP 関連の情報が表示されます。1 つの情報は、マシンの外部 IP アドレスです。
string externalIP = "";
try
{
WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
request.Timeout = 3000;
System.Threading.Tasks.Task<System.Net.WebResponse> response = request.GetResponseAsync();
using (StreamReader stream = new StreamReader(response.Result.GetResponseStream()))
{
if (response.Result.ContentLength != -1)
{
externalIP = stream.ReadToEnd();
}
}
}
catch (Exception e)
{
externalIP = "Error.";
}
if (externalIP == "")
{
return "No service.";
}
else
{
return externalIP = (new Regex(@"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")).Matches(externalIP)[0].ToString();
}
このメソッドは、次のコードから呼び出されます。
private void updateNetworkIP()
{
string ip4e = "External IPv4: " + getExternalIPv4();
lblIP4external.Text = ip4e;
//Get some more info here.
}
getExternalIPv4() の後で、まだ終了していない場合でもコードを実行するにはどうすればよいですか? 上記のようにタイムアウトを設定すると機能しますが、リクエストに少し時間がかかる場合がありますが、それでも正常に完了します。したがって、外部 IP を表示できるようにしたいのですが、GroupBox を更新する他の方法を引き続き実行したいと考えています。