Как запустить индикатор выполнения (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;
}
}