【发布时间】:2016-07-01 12:07:14
【问题描述】:
这是代码块。我将在下面解释细节。
public static bool isConnected;
public MasterClient() //Master Constructor
{
timer1.Interval = 1000;
isConnected = false;
}
private void connectCallback(IAsyncResult ar)
{
try
{
_ClientSocket.EndConnect(ar);
//Global.Meuser = Environment.MachineName;
BeginReceive();
Invoke((MethodInvoker)delegate
{
tslStatus.Text = "Connected";
btnConnect.Text = "Disconnect";
tslStatus.Image = Image.FromFile(Global.path + @"\image\status\online.png");
lbllocalIP.Text = _ClientSocket.LocalEndPoint.ToString();
isConnected = true;
//this.WindowState = FormWindowState.Minimized;
});
}
catch (SocketException ex)
{
isConnected = false;
}
finally
{
if (isConnected == false)
{
counter = 0;
timer1.Start();
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
isConnected = false;
counter += 1;
if (counter > 45)
{
counter = 0;
timer1.Stop();
AutoStart();
}
}
public void AutoStart()
{
if (btnConnect.Text == "Connect")
{
if (IsRunning == false)
{
_buffer = new byte[8192];
_ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_ClientSocket.BeginConnect(new IPEndPoint(IPAddress.Parse(txtServerIP.Text), 9192), new AsyncCallback(connectCallback), null);
}
}
else if (btnConnect.Text == "Disconnect")
{
if (IsRunning == true)
{
CloseClient();
btnConnect.Text = "Connect";
lbllocalIP.Text = "None";
tslStatus.Text = "Disconnected";
tslStatus.Image = Image.FromFile(Global.path + @"\image\status\offline.png");
}
}
}
计时器应该在connectCallback 方法的finally 块中引发的timer1.Start() 事件之后启动。
当我使用断点检查时,在调用timer1.Start() 后,它将变为 Enabled=true 状态。
我已从工具箱中取出计时器控件并将其间隔设置为 1000。
但timer1.Tick 事件仍然没有引发。
条件:当服务器当时没有运行时,SocketException 会触发,同时我需要启动计时器,所以它会在 45 秒后尝试再次连接到服务器,如果失败将重新排队。
【问题讨论】: