Вы можете попробовать подключиться ко всем портам одновременно с несколькими потоками, однако производительность будет ухудшаться по мере запуска новых потоков.Я предлагаю вам попробовать с заданием.
Вот пример с заданием и событием.Это не совсем решение, но вы получите суть в этом.Возможно, вам придется изменить структуру кода.
using System;
using System.Threading.Tasks;
public class Program
{
public class MyEventArgs : EventArgs
{
public int port {get; set; }
public MyEventArgs(int port)
{
this.port = port;
}
}
delegate void OpenPort(object sender, MyEventArgs e);
event OpenPort OnOpen;
int from = 10, to = 20;
int Connected = 16;
public static void Main()
{
var obj = new Program();
// here you register your method ShowPort for OnOpen event.
obj.OnOpen += new OpenPort(ShowPort);
for(int i = obj.from; i < obj.to; i++) {
obj.CheckPort(obj, i);
}
}
private async void CheckPort(Program obj, int i)
{
await CheckPortTask(obj, i);
}
private Task CheckPortTask(Program obj, int i)
{
return Task.Run(() => {
if(i == obj.Connected)
{
obj.OnOpen(this, new MyEventArgs(i));
}
});
}
// This method will be called after connecting.
public static void ShowPort(Object p, MyEventArgs args)
{
Console.WriteLine(args.port);
}
}
Если вы хотите попробовать с потоком, замените блок Task.Run в приведенном выше коде на:
new Thread(()=>{
if(i == obj.w)
{
// this raises the event and calls the ShowPort method.
obj.OnOpen(obj, new MyEventArgs(i));
}
})).Start();