Асинхронный вызов функции Windows Forms C#

92
24 марта 2022, 04:10

У меня есть асинхронная функция. Она вызывается только один раз, когда форма отображается в первый раз. Но почему-то при каждом закрытии дочерних форм запускаться новый поток. Подскажите, где может быть ошибка.

Вызов функции:

private async void MainForm_Shown(object sender, EventArgs e)
    {
        await Start();
    }       

Сама функция:

public async Task Start()
    {
        while (keyOprosDev)
        {
            for (int i = 0; i < devicesListActivity.Count; i++)
            {
                devicesListActivity[i].DevicesList.DevicesTotalPing++;
                string ipAdresDevice = devicesListActivity[i].DevicesList.DevicesName;
                int portDevice = devicesListActivity[i].DevicesList.DevicesPort;
                int activeDevice = devicesListActivity[i].DevicesList.DevicesActiv;
                int sendTimeDevice = devicesListActivity[i].DevicesList.DevicesTimeSend;
                int respTimeDevice = devicesListActivity[i].DevicesList.DevicesTimeResp;
                using (TcpClient client = new TcpClient())
                {
                    if (activeDevice == 1)
                    {
                        client.SendTimeout = sendTimeDevice;
                        client.ReceiveTimeout = respTimeDevice;
                        var ca = client.ConnectAsync(ipAdresDevice, portDevice);
                        await Task.WhenAny(ca, Task.Delay(sendTimeDevice));
                        client.Close();
                        if (ca.IsFaulted || !ca.IsCompleted)
                        {
                            textBox1.AppendText($"{DateTime.Now.ToString()} Server refused connection." + " " + ipAdresDevice + string.Format(" [{0}/{1}]", devicesListActivity[i].DevicesList.DevicesSuccessPing, devicesListActivity[i].DevicesList.DevicesTotalPing) + " " + System.Math.Round((double)(devicesListActivity[i].DevicesList.DevicesSuccessPing / devicesListActivity[i].DevicesList.DevicesTotalPing * 100)) + " %");
                            textBox1.AppendText("\r\n");
                            devicesListActivity[i].DevicesList.DevicesImage = 1;
                        }
                        else
                        {
                            devicesListActivity[i].DevicesList.DevicesSuccessPing++;
                            textBox1.AppendText($"{DateTime.Now.ToString()} Server available" + " " + ipAdresDevice + string.Format(" [{0}/{1}]", devicesListActivity[i].DevicesList.DevicesSuccessPing, devicesListActivity[i].DevicesList.DevicesTotalPing) + " " + System.Math.Round((double)(devicesListActivity[i].DevicesList.DevicesSuccessPing / devicesListActivity[i].DevicesList.DevicesTotalPing * 100)) + " %");
                            textBox1.AppendText("\r\n");
                            devicesListActivity[i].DevicesList.DevicesImage = 2;
                        }
                    }
                    else
                    {
                    }                                                   
                }
                await Task.Delay(interval);
            }                    
        }
    }

А тут открытие дочерней формы:

try
        {
            DbViewer dbViewer = new DbViewer();
            dbViewer.FormClosed += new FormClosedEventHandler(refr_FormClosed);
            dbViewer.ShowDialog();
        }
        catch (Exception ex)
        {
            writeEventInDb(ex.Message);
        }

Это событие которое обрабатывает закрытие дочерней формы:

void refr_FormClosed(object sender, FormClosedEventArgs e)
    {
        try
        {
            kryptonTreeView1.Nodes[0].Nodes[0].Nodes.Clear();
            kryptonTreeView1.Nodes[0].Nodes[1].Nodes.Clear();
            loadIpListFromDb();
            loadComListFromDb();
            kryptonTreeView1.ExpandAll();
        }
        catch (Exception ex)
        {
            writeEventInDb(ex.Message);
        }
    }
READ ALSO
Из чего состоит foreach? [дубликат]

Из чего состоит foreach? [дубликат]

Проходил собеседование наNET разработчика

192
Как сверстать элемент с закругленным углом?

Как сверстать элемент с закругленным углом?

Может кто нибудь подсказать, как можно сверстать элемент с вот таким закругленным углом?

71
Как в теле скрипта задать вывод шаблона ejs c элементом массива?

Как в теле скрипта задать вывод шаблона ejs c элементом массива?

Пробую динамически добавлять данные в таблицуДанные mdata берутся из схемы mongoose

129