请问tabcontrol第一次点击后面的tabpage发生了什么? ui线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 invoke是同步方式改成begininvork试试 主菜单 分析->性能诊断->按你的说法让它卡死一会,然后看分析报告,最长的那一条一般是卡死的原因如果你帖出来invoke里干了什么也许能更容易分析一些 比如这个 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; } } 就是说,tabpage里的控件只存在于后台,根本还没有绘制进tabpage里去 你可以试试获取tabpage2的宽和高,保证是0,0 如果你的tabpage只是用来显示数据,而且很多时候它根本都不显示,那么就不应该在线程里直接对UI进行操作,这样没有意义你应该将线程产生的数据先写入全局变量里,然后在timer里定时更新,这时候可以判断当前显示的是哪个page,不显示的根本不去更新它 不实时跟新的话,在tab切换的时候又会很麻烦啊。 所谓"实时"什么是实时?从线程产生数据,到invork更新到界面上,还有时间差呢反正就是人眼看,更新的再快看的清楚?用个timer每秒更新一次足够看了.嫌慢100ms更新一次 而且你要改为在timer里更新控件的text,根本不需要判断它是否有改变,无脑网上赋值就行因为控件的text属性里set函数本身已经对值是否改变进行了校验,如果不变就不赋值,当然也不会引发控件刷新 「玩一玩」自制虚拟机,第一部分:设计和汇编器 问一个上传下载的问题 winform的listview汇总问题 使用installshield for net2003,dll没有打包进去 C#web应用加载Dll失败有哪些原因? 如何让C#写的应用程序最小化时显示在右下角的任务栏中?就像金山词霸那样。 用wmi如何获取本地磁盘各个分区的大小和freespace ComboBox控件的问题 看看我能卖多少钱? 散分!再来一个算法问题!初中的题,看看大家了! 应用程序CPU占用偏高,该如何解决!!!!! 请教Graphics如何实现windows GDI函数PatBlt()的功能
改成begininvork试试
比如这个
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;
}
}
你应该将线程产生的数据先写入全局变量里,然后在timer里定时更新,这时候可以判断当前显示的是哪个page,不显示的根本不去更新它
不实时跟新的话,在tab切换的时候又会很麻烦啊。
什么是实时?
从线程产生数据,到invork更新到界面上,还有时间差呢反正就是人眼看,更新的再快看的清楚?用个timer每秒更新一次足够看了.嫌慢100ms更新一次
因为控件的text属性里set函数本身已经对值是否改变进行了校验,如果不变就不赋值,当然也不会引发控件刷新