private void button2_Click(object sender, System.EventArgs e)
{
        timer.start();
        errors=ConnRemote(ip,nPort,user,userpassword);
}//timer1的事件函数
private void timer1_Tick(object sender, System.EventArgs e)
{
timer1.Stop();
MessageBox.Show("aa");
}timer的interval=100,
可是timer的tick事件根本不执行,如果把
errors=ConnRemote(ip,nPort,user,userpassword);去掉就正常了 
public int ConnRemote(string Ip,int NPort,string User,string Password)
{
 Thread thread=new Thread(new ThreadStart(LoginConn));
thread.Start();
allDone.WaitOne();
} public int ConnRemote(string Ip,int NPort,string User,string Password)///用socket连接到远程服务器
{
allDone.Reset();
Thread thread=new Thread(new ThreadStart(LoginConn));
thread.Start();
allDone.WaitOne();
}
private void LoginConn()
{  IPEndPoint ipRemoteEndPoint= new IPEndPoint(IPAddress.Parse(ip), nPort);
  conn_sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
  connectDone.Reset();
  conn_sock.BeginConnect(ipRemoteEndPoint,new AsyncCallback(ConnectCallback),conn_sock);
  connectDone.WaitOne();
}我怎么才能让timer有效呢

解决方案 »

  1.   

    执行事件了,但是必须是在执行完ConnRemote之后
      

  2.   

    allDone.Reset();
    Thread thread=new Thread(new ThreadStart(LoginConn));
    thread.Start();
    allDone.WaitOne();当然阻塞住了,没有调用allDone.Set()那么allDone.WaitOne()不会退出,所以当你调用ConnRemote的时候根本就无法退出,当然不会调用timer的事件了
      

  3.   

    allDone.WaitOne();
    对应的allDone.Set()方法去哪里了?
      

  4.   

    to xixigongzhu:
     我的allDone.Set()当然在函数LoginConn里了to sun926:我想问有没有解决办法to Jim3:
    应该是一样的吧,好像没解决问题雅
      

  5.   

    private void LoginConn()
    {  IPEndPoint ipRemoteEndPoint= new IPEndPoint(IPAddress.Parse(ip), nPort);
      conn_sock=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
      connectDone.Reset();
      conn_sock.BeginConnect(ipRemoteEndPoint,new AsyncCallback(ConnectCallback),conn_sock);
      connectDone.WaitOne();
    }
    楼主上面的函数哪里有allDone.Set()????
      

  6.   

    载ConnectCallback函数里面吗,
    我都说了,我的代码用了很长时间没问题,只是想加个定时器而已
      

  7.   

    定时器有几种,你使用的是System.Window.Form.Timer,它是运行在主线程里的,所以不能同时执行,一定要等 errors=ConnRemote(ip,nPort,user,userpassword);执行完毕,
    可以改为使用System.Timers.Timer,这个是真正的Timer,运行在独立线程里,可以同时执行。