Control.Invoke "ставит в очередь" выполнение метода в пользовательском интерфейсе обработки потока (для того, чтобы сериализовать эти стандартные вызовы в другие стандартные вызовы пользовательского интерфейса).
Даже если вы запускаете поток, который вызывает Control.Invoke, подпрограмма APSScan
выполняется в потоке, который вызвал Application.Run ... и я вижу, что APSScan никогда не возвращается, вызывая остановку потока пользовательского интерфейса.
Решение состоит в том, чтобы вызывать Control.Invoke несколько раз, повторяя цикл в ScanThread
.
Используя ваш код:
private void ScanThread()
{
while (true) {
listView1.Invoke(new APScanCallback(APScan));
Thread.Sleep(10000);
}
}
public void APScan()
{
listView1.Items.Clear();
foreach (AccessPoint ap in wzcInterface.NearbyAccessPoints)
{
ListViewItem item = new ListViewItem(ap.Name);
item.SubItems.Add(ap.PhysicalAddress.ToString());
item.SubItems.Add(ap.SignalStrength.Decibels.ToString());
item.SubItems.Add(ap.AuthenticationMode.ToString());
listView1.Items.Add(item);
}
listView1.Refresh();
}