當我使用F11調試,NetStatus
值true
,但是當我使用F5調試,NetStatus
價值false
。爲什麼?我如何解決它?C#TimerCallback返回值誤差
我不知道什麼時候_connect
值的變化。 這是一個多線程同步問題嗎?
namespace conn
{
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
class Program
{
static void Main(string[] args)
{
wait_conn();
}
private static void wait_conn()
{
bool NetStatus = false;
string DataS = "127.0.0.1";
CheckIpConn conn = new CheckIpConn();
conn.CheckIp(DataS);
//Thread.Sleep(3000);
NetStatus = conn.Connected;
if (!NetStatus)
Console.WriteLine(conn.Connected.ToString());
Console.Read();
}
}
public class CheckIpConn
{
private int _port = 135;
private volatile bool _connect;
private IPEndPoint _iPEndPoint;
private TcpClient _client;
private TimerCallback _timerCallBack;
private System.Threading.Timer _timer;
public bool Connected
{
get { return _connect; }
}
public void CheckIp(string Ip)
{
_iPEndPoint = new IPEndPoint(IPAddress.Parse(Ip), _port);
_timerCallBack = new TimerCallback(CheckConnect);
_timer = new System.Threading.Timer(_timerCallBack, null, 10, 1000);
_timer.Dispose();
}
public void CheckConnect(object o)
{
try
{
_client = new TcpClient();
_client.Connect(_iPEndPoint);
_connect = true;
_client.Close();
}
catch
{
_connect = false;
}
}
}
}
我明白了!我添加Thread.Sleep(300);在conn.Connected之前,添加Thread.Sleep(2000);之前_timer.Dispose();現在,這是工作!謝謝! – flyingnn
@flyingnn:雖然這不是一個好的解決方案。這基本上是檢查連接的緩慢和不可靠的方式......正如我所說,我強烈建議使用同步方法,除非您真的想要正確執行異步方法*。用'Sleep'調用代碼來代碼是不是一個獲得可靠系統的好方法。 –
我是C#初學者。我想在連接到它的SQL端口之前檢查目標主機的網絡狀態。否則,當SQL SERVER關閉時,用戶將等待20-30S。 – flyingnn