日期:2014-05-18  浏览次数:20969 次

分析下 怎么弄.
我现在有两个方法,
方法一:读数据,
public string[] SetData(string s,int s2)
{

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

------解决方案--------------------
不会多线程啊
------解决方案--------------------
不太清楚你的需求,如果想用多线程的方式,基本思路是:

创建一个保存结果的缓冲区,读取和分析数据的作业是一个线程,往缓冲区中写数据,显示数据的作业是另一个线程,循环检测缓冲区中的数据并发送显示。

需要注意的地方是多线程操作的对象要注意加锁。
------解决方案--------------------
在这儿也不好说???


就是用多线程
------解决方案--------------------
是要对SetData方法读出的每个string进行GetData?


------解决方案--------------------
找个ArrayList做中间交换区
一个线程放数据到列表中.另一线程读出来再进行操作,同时要lock一下
线程这个太复习拉搞不好反而会令程序越搞越麻烦
------解决方案--------------------
呵呵 这个很简单 用WHILE循环读取,每次读取出来打入泛型集合中(你自定义的)
然后开启多线程每次取出队列首位,移除,然后自己加工去,然后显示即可
------解决方案--------------------
效率不高,在这个多线程中需要进行同步,否则分析会出错的。现在的MS OS也没有为多线程提供合格的平台
------解决方案--------------------
别搞得那么复杂,说起来就吓唬人

2线程足够,在原有线程上加1个读取的,

做一个事件,读出 100条,1000条 ,触发一个事件 调用输出方法

简单,易行
------解决方案--------------------
不了解你定义的 string[] 返回值干什么用的,有什么逻辑联系。

程序结构类似于:
C# code
 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();