ThreadPool 就行, 不建议搞那个骗人的Task.用ThreadPool搞定线程一切.不存在什么线程里又开子线程问题. 归根结底, 所有的都是线程. 只需要注意以下线程处理模型就可以.也就是 判断一下System.Threading.SynchronizationContext.Current

解决方案 »

  1.   

    这样写的目的:1:因为整个程序是为了完成一整套的工作.如动作A到动作B再到动作C,其中动作A中可能         也会包含动作A1,A2.动作B中也可能包含B1 B2等. 
           没看懂,是在主线程中开启子线程吗?子线程再开启孙线程吗?虽然实质上她们都是线程,但是变量的作用域的问题,最好还是分开
           2:因为第一个具体的动作都涉及一个模块,都是写在一个方法里面的.方便调用.
           也没看懂,什么叫写在一个方法里面,是说这个方法可以根据你传入的参数自动判断需要开启哪一个线程吗
           3:因为在辅助线程中获得的数据要及时刷新,要调用有主界面中控件listview,也就要用到委               托,也就要别开线程
                 [color=#99CC00]也就要用到委托,也就要别开线程 还是没看懂,子线程获取到数据,通过委托的方式去更新控件吗?这种方法是可行的,我以前试过[/color]
        因为整个程序的执行效率要求比较高,但多开辅助线程也会占用很多的时间,所以想请教下,针对我这种要求,有没有更好的编程思想方法.谢谢
    没看懂,首先多开线程是为了加速程序的运行,将单通道处理变成多通道处理
    我觉得 线程最好还是不要用的好
    太难控制了,除非是同样类型的数据需要处理,不然你可以去试试异步刷新
      

  2.   

    我举一个例子,比如说有一个地图系统,当用户漫游(用鼠标拖动地图)时,每一个Move操作通常会在系统线程池中注册一个任务。每一个任务可能实际上首先休眠(Sleep)200毫秒,然后判断一下是否已经有相同功能的线程正在处理(这通过一个 private bool Pending 变量来判断。如果它是 true,那么就立刻结束了。这样就是希望当有几十个Move操作被重入时,只有一个会被执行。这样做的目的,是保证用户拖动地图时,系统灵敏地反映到最新的Move坐标位置,同时又不要过早地加载新的地图,而是200毫秒以后才加载。
    而对于进入地图加载加载过程的那个线程处理过程,比如说,可能遍历地图上所有的“瓦片”,判断这个瓦片是否在用户可见区域内、并且尚未加载到地图上,或者判断其是否已经移出当前用户可见区域。如果是第一种情况,就会加载这个瓦片。如果是第二种情况,则会从画布上删除这个瓦片图片(以便节省内存资源)。而瓦片加载过程,可能就会使用 WebClient 对象的 DownloadFileAsync 方法来下载瓦片图片,并且注册这个对象的 DownloadFileCompleted 事件处理中将下载来的图片文件画到画布上,并且设置好当前地图的瓦片参数。(实际上下载文件时会同时判断服务器上的瓦片是否新文件,如果不是则直接使用本地缓存文件。这是优化问题,与这个主题无关)当下载瓦片时,可能要同时下载30、40个或者更多的瓦片。有的快、有的慢。显然不能顺序下载,否则就成了拖动时“一片白”的地图了。当你灵活地拖动地图时,你会发现地图上新刷新的图片部分的出现次序是无序的,没有固定的先后次序。当地图漫游拖动时,除了它要处理瓦片下载,而且可能还要更新“鹰眼”(一个小尺寸的全局地图)里边的取景框的位置,例如还要更新地图的坐标显示,还要触发事件地图上有关图层的业务操作(例如当一些摄像头进入地图用户可见区域时,我们开始建立跟这些摄像头的通讯联系。当它们离开用户可见区域时,我们关闭通讯)。等等。你完全可能在用户简单地“拖动一下地图”操作时,触发成百上千个子线程,而且子线程还会创建子线程。但是这些都跟业务逻辑有关。这些都是从业务逻辑直接对应过来、很平常的设计。
      

  3.   

    首先感谢各位的回帖
    1 : 没看懂,是在主线程中开启子线程吗?子线程再开启孙线程吗?虽然实质上她们都是线程,但是变量的作用域的问题,最好还是分开???
       我想表达的意思是在主线程中开启子线程,然后在子线程中再开孙线程2:也没看懂,什么叫写在一个方法里面,是说这个方法可以根据你传入的参数自动判断需要开启哪一个线程吗??
       每一个动作写在一个单独的方法中,当前一个动作完成后,会将一个变量置为整数如2或7类似的。然后下一个动作用if(i==2)判断下,如条件成立,就执行下个方法,或在当前子线程中再开启一个孙线程。
    3:没看懂,首先多开线程是为了加速程序的运行,将单通道处理变成多通道处理

      我写的代码是用来控制自动化设备的,主要的功能有三个,1 控制设备完成一整套动作 2:进行视觉处理 3向Excel中写入数据。其中视觉处理及Excel写入会在某个动作之发生,这也是我为何想在子线程中孙线程的原因。4: 没看懂,首先多开线程是为了加速程序的运行,将单通道处理变成多通道处理 整套动作的周期很短,大概只的0.5S左右要完成一个周期,而且是周期性的循环。我担心在多开线程时,也会占用时间谢谢
      

  4.   

    我前前后后花了将近50分钟才看懂你要干什么,也不知道我理解的对不对
    此外 请看看你给我的回复其中视觉处理及Excel写入会在某个动作之发生,这也是我为何想在子线程中孙线程的原因。  之前?之后?之中?打完了字,稍微花点时间看一下我的感觉大概就是:
    比如的自动化设备是采集图像,采集完之后开启线程处理图像,
    采集图像1 ----》采集完成----》采集图像2------》采集完成------》
                            线程-》处理图像1                线程-》处理图像2
    无法获得你的具体需求,说的很含糊,貌似需要保密啊。我能帮助的很少,抱歉
    其次对于像7楼那种人,我觉得你不要太在意,我很不鸟他,我以前也会在csdn问一些问题
    他的回答直接屏蔽   中国从来就不缺这种   空 大 泛 的人  都多少年,还一直这个调调
    讲理论毫无作用,别人问1+1 回答2就行了  
    多多独立思考确实很有帮助