子线程操作主线程控件,我使用的委托和Invoker()方法,确实能实现功能。
但是子线程在长时间运行的时候,主界面无法响应。因为这种方法其实是“注入”到了主线程,子线程不返回,主线程就无法响应。这就失去了多线程的意义了。还一种思路是,如果无法解决上面的问题,能不能让子线程运行返回的值,让主线程去使用。希望能提供个实例。实际问题就是,我界面上有2个TreeView,我希望它们有各自的线程去读取节点,并添加上去

解决方案 »

  1.   

    用timer去读好了,干吗要用线程呢
    消息线程和工作线程本来就是分开的,各干各的事,
    如果你非要让工作线程来维护控件,那是不可能的,你看到的那个Invoker其实应该是类似与SendMessage这样的函数,发个消息到消息线程,让它来维护控件
      

  2.   


    你可真够扯淡的。
    用timer,程序还不照样卡在那里。跟我单线程直接进行有什么区别,
    还多此一举
      

  3.   

    我觉得是同步异步的问题吧。
    我也遇到过同样的问题
    但是TIMER的同学是不是有点呆啊?鄙人不太专业,但是觉得用TIMER的话,似乎有很大差异
    跟楼主学习一下
      

  4.   

    其实分开来就是2步动作,获取TreeView的一个节点对象,然后添加至TreeView
    由于数据比较多,获取节点对象就比较慢。我的思路也就2种
    1:让子线程去获取节点,主线程添加         问题:如何让主线程使用子线程获得的节点对象
    2:子线程获取,并添加                     问题:子线程"注入"到主线程不返回,主线程无法响应
      

  5.   

    猜测了楼主的意思    1在主线程定义一个A事件   2子线程获取TreeView的一个节点对象  2 子线程完成后触发事件A   3 A事件里去动态添加TreeView
      

  6.   

    大哥  在事件里定义个该对象的类型啊  当成参数传出来啊  然后在事件里用treeview去加载这个参数啊