使用c#中的线程获取记录时出错

时间:2014-05-24 15:52:46

标签: c#

我正在尝试运行该线程,以便在查询的基础上同时从网络中获取结果。下面是我的线程调用代码

 for(int i=0;i<numberOfConnection;i++) 
 { 
      //threadResult[i] = onListen(s[i], toquery); 
      exec[i] = new Thread(() => threadResult[i] = onListen(s[i], toquery));           
      exec[i].Start(); 
 }

onListen功能

private string onListen(Socket s,string query)
{
string returnmsg = DateTime.Now.ToString("HH:mm:ss.ffff tt"); //= Start Time ===
try
{
Stream ss = new NetworkStream(s);
            StreamReader sr = new StreamReader(ss);
            StreamWriter sw = new StreamWriter(ss);
            sw.AutoFlush = true;
            sw.WriteLine(query);
            returnmsg += " " + sr.ReadLine() + " " + DateTime.Now.ToString("HH:mm:ss.ffff tt"); //== End Time ==
            s.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        return returnmsg;
    }

但是我收到索引超出范围异常的错误。

如果我在不使用此类线程的情况下运行相同的代码

threadResult[i] = onListen(s[i], toquery);

它有效。请帮我跟踪错误。

1 个答案:

答案 0 :(得分:-1)

试试这个:

 for(int i=0;i<numberOfConnection - 1;i++) 
 { 
    //threadResult[i] = onListen(s[i], toquery); 
    exec[i] = new Thread(() => threadResult[i] = onListen(s[i], toquery));           
    exec[i].Start(); 
 }

或者

 for(int i=1;i<numberOfConnection;i++) 
 { 
    //threadResult[i] = onListen(s[i], toquery); 
    exec[i] = new Thread(() => threadResult[i] =    onListen(s[i], toquery));           
    exec[i].Start(); 
  }