当前位置:编程学习 > C#/ASP.NET >>

求一个线程的思路

主要是这样的.我有一个全局的list,我要用线程来便利它,但因为里面有个属性,是说明能不能用线程的,所以,我不用能线程来便利,只能如我以下的结构

List<Data> list=new List<Data>;

void CheckList(int id)//id为要检查的list索引.
{
  //这里就是判断list是否可以使用线程来抓取
   if(list[i].userThread)
     UserThread();
   else 
     noUserThread();
}
void UserThread()
{
// 开启线程
ThreadStart ts = new ThreadStart(OpenThread);
        if (ts != null)
        {

            Thread CatchThread = new Thread(ts);
            CatchThread.Start();
        }
}
void OpenThread()
{
   //这里就处理要处理的一堆事情,我想在处理完这一堆事情后,继续抓下一个.list.当然,是有个全局变量记录当前抓取到第几个得.
}

但这样写就有问题,就是在线程内在new一个线程.这是错误的.不知道有什么好的办法.能不在线程内创建线程呢? --------------------编程问答--------------------
引用楼主 wozhidaode2010 的回复:
主要是这样的.我有一个全局的list,我要用线程来便利它,但因为里面有个属性,是说明能不能用线程的,所以,我不用能线程来便利,只能如我以下的结构
C# code
List<Data> list=new List<Data>;void CheckList(int id)//id为要检查的list索引.{//这里就是判断list是否可以使用线程来抓取if(list[i].userThread)
     UserThread();else 
     noUserThread();
}void UserThread()
{// 开启线程ThreadStart ts=new ThreadStart(OpenThread);if (ts!=null)
        {

            Thread CatchThread=new Thread(ts);
            CatchThread.Start();
        }
}void OpenThread()
{//这里就处理要处理的一堆事情,我想在处理完这一堆事情后,继续抓下一个.list.当然,是有个全局变量记录当前抓取到第几个得.}
但这样写就有问题,就是在线程内在new一个线程.这是错误的.不知道有什么好的办法.能不在线程内创建线程呢?
CheckList --------------------编程问答-------------------- List<Data> list=new List<Data>;
private AutoResetEvent[] autoEvents = new AutoResetEvent[]
{
     new AutoResetEvent(false)
};

void CheckList(int id)//id为要检查的list索引.
{
  //这里就是判断list是否可以使用线程来抓取
   if(list[i].userThread)
   {
      UserThread();
      WaitHandle.WaitAll(autoEvents);
   }
   else 
     noUserThread();

}

void UserThread()
{
// 开启线程
        ThreadStart ts = new ThreadStart(OpenThread);
        ts.IsBackground=true;
        ts.Start()
}
void OpenThread()
{
   autoEvents[0].WaitOne();
   //...处理方法
   autoEvents[0].Set();
}

main()
{
    for(int i=0;i<list.Count;i++)
    {
        CheckList(list[i].ID);
    }
} --------------------编程问答-------------------- 线程内再开线程不行吗? --------------------编程问答--------------------

List<Data> list=new List<Data>;
ThreadStart ts = new ThreadStart(OpenThread);
ts.start();
void OpenThread()
{
CheckList(id);
}

void CheckList(int id)//id为要检查的list索引.
{
  //这里就是判断list是否可以使用线程来抓取
   if(list[i].userThread)
 {
//do something
}
}


把思路简化一下
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,