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

本文关键字:获取 记录 出错 线程 | 更新日期: 2023-09-27 18:04:51

我正在尝试运行线程以根据查询同时从网络获取结果。下面是我调用

线程的代码
 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;
    }

但是我得到index out of range异常的错误。

如果我运行相同的代码而不使用像这样的线程

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

它的工作原理。

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

试试这个:

 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(); 
  }