これはコードブロックです。私は以下の詳細を説明します。timer.Start()イベントを発生させるとタイマが起動しません
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秒後に試行し、失敗した場合は再キューされます。
私はツールボックスからコントロールを取得しており、デザイナーページには既にその行があります。 'this.timer1.Interval = 1000;' 'this.timer1.Tick + = new System.EventHandler(this.timer1_Tick);' –
isConnected == falseのときにtimer1.start()を呼び出しています。私はif条件の外にtimer1.start()を移動する必要があると思います。 – Sanket
tryブロックで例外が発生したときに呼び出す必要があります。ブロックをキャッチして 'isConected = true'を設定します。 これは、間違ったIPアドレスを入力してSocketExceptionをスローするようにしています。 –