Как запустить индикатор выполнения (Marquee) или индикатор выполнения во время инструкции try-catch (при подключении к серверу через tcp-сокет)?

Было бы здорово, если бы кто-нибудь мог мне помочь.

В моем приложении я пытаюсь подключиться к серверу, используя оператор try-catch.

Я хотел бы запустить индикатор выполнения (или индикатор выполнения), когда клиент пытается подключиться к серверу, и остановить его, когда подключение установлено или не установлено. Но это не работает.. Есть идеи, как это сделать?

Вот мой код формы:

    private void btnConnect_Click(object sender, EventArgs e)
    {
        IPAddress ipAddress = null;
        ConnectionManager _conMngr = new ConnectionManager();

        if (IpAddress != String.Empty && IPAddress.TryParse(IpAddress, out ipAddress))
        {
            progressSpinner.Visible = true; // This is my progressSpinner
            lblStatus.Text = "Trying to connect...";

            try
            {
                _conMngr.ConnectToServer(IpAddress);
            }
            catch (SystemException ecp)
            {
                txtInfoBox.Text += Environment.NewLine + "Connection failed! " + ecp.Message;
            }   
        }
        else
            MessageBox.Show(this, "Please enter a valid IP address!", "Error: Invalid IP address", MessageBoxButtons.OK, MessageBoxIcon.Error);

Класс ConnectionManager:

public class ConnectionManager
{
    public Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);

    public void ConnectToChargingStation(string ip)
    {
        try
        {
            IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse(ip), 13000);
            clientSock.Connect(ipEnd);
        }
        catch (Exception ex)
        {
            throw ex;
        }
     }
}

Спасибо!

1 ответ

Решение

Решено!

      private async void btnConnect_Click(object sender, EventArgs e) 
      { 
                progressSpinner.Visible = true;
                lblStatus.Text = "Status: Trying to connect...";
                pgbBusy.Visible = true;

                try
                {
                    await Task.Factory.StartNew(() =>
                    {
                        _conMngr.ConnectToServer(IpAddress);
                        lblStatus.Text = "Status: Connected to " + IpAddress;
                    });
                }
                catch (SystemException excp)
                {
                    InfoBoxText += Environment.NewLine + "Connection failed! " + excp.Message;
                    lblStatus.Text = "Status: Disconnected";
                }
                finally
                {
                    progressSpinner.Visible = false;
                    pgbBusy.Visible = false;
                } 
      }
Другие вопросы по тегам