我正在尝试使用 C# 将 IP 地址异步解析为主机名,然后将结果添加到 ListBox。异步操作工作正常,但我无法将解析的名称添加到列表框中,因为另一个线程拥有它。如何绕过此问题并将解析的名称添加到列表框中。
这是我到目前为止所做的
public static ManualResetEvent GetHostEntryFinished = new ManualResetEvent(false);
private void AsyncDNSResolver(string IPString)
{
GetHostEntryFinished.Reset();
IPHostEntry host = new IPHostEntry();
host.AddressList = new IPAddress[] { IPAddress.Parse(IPString) };
Dns.BeginGetHostEntry(host.AddressList[0], new AsyncCallback(GetHostEntryCallback), host);
GetHostEntryFinished.WaitOne();
}
public static void GetHostEntryCallback(IAsyncResult ar)
{
IPHostEntry host = (IPHostEntry)ar.AsyncState;
while (!ar.IsCompleted) ;
host = Dns.EndGetHostEntry(ar);
lsvHosts.items.add(host.HostName);
GetHostEntryFinished.Set();
}