解决方案 »

  1.   

    invoke是同步方式
    改成begininvork试试
      

  2.   

    主菜单 分析->性能诊断->按你的说法让它卡死一会,然后看分析报告,最长的那一条一般是卡死的原因如果你帖出来invoke里干了什么也许能更容易分析一些
      

  3.   


    比如这个
            private void SetImageIndexTreeNode(TreeNode tn, int index)
            {
                if (tn.TreeView.InvokeRequired)
                {
                    SetImageIndexTreeNodeCallBack cb = SetImageIndexTreeNode;
                    Invoke(cb, new object[] {tn, index});
                }
                else
                {
                    tn.ImageIndex = index;
                    tn.SelectedImageIndex = index;
                }
            }
      

  4.   

    就是说,tabpage里的控件只存在于后台,根本还没有绘制进tabpage里去
      

  5.   

    你可以试试获取tabpage2的宽和高,保证是0,0
      

  6.   

    如果你的tabpage只是用来显示数据,而且很多时候它根本都不显示,那么就不应该在线程里直接对UI进行操作,这样没有意义
    你应该将线程产生的数据先写入全局变量里,然后在timer里定时更新,这时候可以判断当前显示的是哪个page,不显示的根本不去更新它
      

  7.   


    不实时跟新的话,在tab切换的时候又会很麻烦啊。
      

  8.   

    所谓"实时"
    什么是实时?
    从线程产生数据,到invork更新到界面上,还有时间差呢反正就是人眼看,更新的再快看的清楚?用个timer每秒更新一次足够看了.嫌慢100ms更新一次
      

  9.   

    而且你要改为在timer里更新控件的text,根本不需要判断它是否有改变,无脑网上赋值就行
    因为控件的text属性里set函数本身已经对值是否改变进行了校验,如果不变就不赋值,当然也不会引发控件刷新