Взгляните на использование потока BackgroundWorker:
MSDN - BackgroundWorker
Я подозреваю, что проблема, с которой вы столкнулись, заключается в том, что внутри потока, который вы создаете, выпытаются связать ваши результаты немедленно с вашими элементами управления пользовательского интерфейса.По сути, когда вы создаете такой поток, ему не разрешается общаться с какими-либо элементами пользовательского интерфейса, потому что они находятся в разных потоках.
В вашем случае я бы создал BackgroundWorker, поместив большую часть кода выше вМетод DoWork, который заполняет ваши списки, а затем в методе RunWorkerCompleted связывает ваши «Списки <>» с вашими пользовательскими элементами управления.
Обновление для Compact Framework 3.5:
Выограничено многопоточностью только с Thread.Start и Timer:
многопоточность в Compact Framework
Это больше похоже на то, что вам нужно сделать:
Microsoft .NET Compact Framework Советы по многопоточности
В этом случае я вернусь к тому, над чем вы работали.Что меня беспокоит в вашем фрагменте кода, так это то, что, похоже, не было вызова метода, который фактически получил ваши устройства Bluetooth.Вот где я бы начал:
private void SearchBTDevices()
{
Thread thread = new Thread(new ThreadStart(delegate
{
List<BluetoothDevice> list = new List<BluetoothDevice>();
// isn't there some method you have that populates your List<BluetoothDevices>????
list = FindMeMyBluetoothDevices();
this.Invoke(new MethodInvoker(() =>
{
this.discoverableDevices.Clear();
list.ForEach(x => this.discoverableDevices.Add(x));
}));
this.Invoke(new MethodInvoker(() =>
{
ConnectedSEMDevices.Clear();
list.Where(x => x.HasAuthenticated).ToList().ForEach(x => ConnectedSEMDevices.Add(x));
}));
}));
thread.Start();
}