我现在有两个方法,
方法一:读数据,
public string[] SetData(string s,int s2)
{}
方法二:分析数据.并显示.
public string[] GetData(string s)
{
}
由于数据量大,如果单线程运行,肯定需要大量时间.所以想一边读数据,一边分析数据,最后显示.
怎么用多线程去写呢,红自部分是我比较不能理解的,因为分析的数据是方法一读出来的数据,需要一条一条处理,怎么传才能保证多线程处理.

解决方案 »

  1.   

    是要对SetData方法读出的每个string进行GetData?
      

  2.   

    找个ArrayList做中间交换区
    一个线程放数据到列表中.另一线程读出来再进行操作,同时要lock一下
    线程这个太复习拉搞不好反而会令程序越搞越麻烦
      

  3.   

    呵呵 这个很简单 用WHILE循环读取,每次读取出来打入泛型集合中(你自定义的)
    然后开启多线程每次取出队列首位,移除,然后自己加工去,然后显示即可
      

  4.   

    效率不高,在这个多线程中需要进行同步,否则分析会出错的。现在的MS OS也没有为多线程提供合格的平台
      

  5.   

    不了解你定义的 string[] 返回值干什么用的,有什么逻辑联系。程序结构类似于: public string[] SetData(string s, int s2)
        {
            //todo: 读取数据
            ThreadPool.QueueUserWorkItem(new WaitCallback(DoGetData), s);
        }
        public string[] GetData(string s)
        {
        }    private void DoGetData(object s)
        {
            string[] result = GetData((string)s);
            //todo:显示Result
        }    public void Main()
        {
            while (!是否结束主线程())
            {
                //todo: 使用两个参数调用 SetData();
                Thread.Sleep(1);    //1,或者你认为合适的值。
            }
        }    private bool 是否结束主线程()
        {
            throw new NotImplementedException();我无法去理解你的SetData的string[]返回值和GetData的string输入值有什么联系。上面的程序只是一种可能的示例。
      

  6.   


    合格的平台是怎样的?现在的MS OS又是怎样的?.Net Framework在线程方面又是怎样的?不需要编写代码的“同步”技巧,并且.Net中所没有的同步技巧,是怎样的?不要仅仅冷嘲热讽嘛,稍微多说明一下好不好。
      

  7.   


    我不知道你如何显示。当你显示时,可能子线程中无法直接操作主线程中的一些界面层对象。你可以参考http://topic.csdn.net/u/20081002/23/0e911b8e-4cc5-4766-8d26-a885414df3c3.html
      

  8.   

    哦,如果保持你的程序原有功能,大概应该是这样的意思吧:    public string[] SetData(string s, int s2)
        {
        }
        public string[] GetData(string s)
        {
        }    private void DoGetData(object s)
        {
            string[] result = GetData((string)s);
            //todo:显示Result
        }    public void Main()
        {
            while (!是否结束主线程())
            {
                string[] result;
                //todo:使用两个参数调用 SetData() 结果赋值给 result
                foreach (string s in result)
                    ThreadPool.QueueUserWorkItem(new WaitCallback(DoGetData), s);
                Thread.Sleep(1);    //1,或者你认为合适的值。
            }
        }    private bool 是否结束主线程()
        {
            throw new NotImplementedException();
        }