2009-11-04 72 views
0

好了,所以我有这样的代码,我写道:C#线程和类问题

class Connection 
{ 
    public static StreamWriter writer; 
    public static string SERVER; 
    private static int PORT; 
    private static string USER; 
    private static string NICK; 
    private static string CHANNELS; 
    private Thread connection; 
    private Thread ping; 
    public Connection() 
    { 
     connection = new Thread(new ThreadStart(this.Run)); 
     ping = new Thread(new ThreadStart(this.Ping)); 
    } 
    public void Start(string server, int port, string ident, string realname, string nick, string channels) 
    { 
     SERVER = server; 
     PORT = port; 
     USER = "USER " + ident + " 8 * :" + realname; 
     NICK = nick; 
     CHANNELS = channels; 
     connection.Start(); 
     ping.Start(); 
    } 
    public void Ping() 
    { 
     while (true) 
     { 
      try 
      { 
       writer.WriteLine("PING :" + SERVER); 
       writer.Flush(); 
       Console.WriteLine("Ping: " + SERVER); 
       Thread.Sleep(15000); 
      } 
      catch (Exception e) { Console.WriteLine(e.ToString()); } 
     } 
    } 
    public void Run() 
    { 
     NetworkStream stream; 
     TcpClient irc; 
     string inputLine; 
     StreamReader reader; 
     try 
     { 
      irc = new TcpClient(SERVER, PORT); 
      stream = irc.GetStream(); 
      reader = new StreamReader(stream); 
      writer = new StreamWriter(stream); 
      writer.WriteLine(USER); 
      writer.Flush(); 
      writer.WriteLine("NICK " + NICK); 
      writer.Flush(); 
      Thread.Sleep(5000); 
      writer.WriteLine("JOIN " + CHANNELS); 
      writer.Flush(); 

      while (true) 
      { 
       while ((inputLine = reader.ReadLine()) != null) 
       { 
        Console.WriteLine(inputLine); 
       } 
       writer.Close(); 
       reader.Close(); 
       irc.Close(); 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.ToString()); 
      Thread.Sleep(5000); 
      Run(); 
     } 
    } 
} 
现在

,即workes完美,当我推出的第一台服务器:

Connection one = new Connection(); 
    one.Start("irc.serveraddress.com", 6667, "ident", "realname", "nick", "#channel"); 

要乒服务器上时间,一切..但只要我介绍第二个连接:

Connection two = new Connection(); 
two.Start("irc.differentserveraddress.com", 6667, "ident", "realname", "nick", "#channel"); 

它停止ping第一台服务器。并只是ping第二台服务器,我怎么能这样做,它会继续ping两台服务器?

+0

我怀疑静态属性与它有关。两个Ping线程都使用了与引入第二个连接时相同的属性。 – 2009-11-04 07:17:28

回答

2
public static string SERVER; 

由于该字段是静态的,因此该类的所有实例都指向同一台服务器。当您创建第二个实例时,它会在此字段中存储第二个服务器的名称,这意味着第一个实例也会使用它。

1

删除所有“静态”。你应该关闭连接,关闭类对象,而不是创建一个实例。