у меня есть асинхронный метод метод который проверяет порт и возвращает результат и есть метод который запускает проверку и там есть условие которое выводит результат когда запускаешь много методов выходит такая вот штука
если метод не успел вернуть статус до запуска новой задачи мы не узнаем результат , как можно это обойти ?
private async void CheckBox_Checked(object sender, RoutedEventArgs e)
{
panel = new StatusPanel();
ProgressBar = new ProgressBar();
panel.TypePortBlock.Content = ProgressBar;
PaneStat.Children.Add(panel);
var obj = (CheckBox)sender;
string[] Ip = obj.Content.ToString().Split(new char[] { '/' });
panel.Name = RandomString(random.Next(1,30));
panel.IpaddressBlock.Text = GetIPAddress() ;
panel.PortBlock.Text = Ip[0];
ProgressBar.IsIndeterminate = true;
ProgressBar.Width = 40;
ProgressBar.Height = 10;
ProgressBar.Maximum = 100;
ProgressBar.Minimum = 0;
panel.StatusBlock.Background = Brushes.Orange;
panel.StatusBlock.Text = "Trying to connect";
if (await Task.Run(() => StatusPort(int.Parse(Ip[0]))) == true)
{
panel.StatusBlock.Background = Brushes.Green;
panel.StatusBlock.Text = "Enabled";
ProgressBar.Value = 100;
ProgressBar.IsIndeterminate = false;
}
else
{
panel.StatusBlock.Background = Brushes.Red;
panel.StatusBlock.Text = "disabled";
ProgressBar.Value = 100;
ProgressBar.IsIndeterminate = false;
}
}
private async Task<bool> StatusPort(int port)
{
bool status=false;
try
{
TcpClient t = new TcpClient(AddressFamily.InterNetwork);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("192.168.222.17"), port);
// t.SendTimeout = 5;
t.Connect(ipEndPoint);
status = true;
}
catch (SocketException ex)
{
status =false;
}
return status;
}