C#板块,帖子没有内容。

屡败屡战数马援 2007-05-31 02:12:34
地址:
http://community.csdn.net/Expert/topic/5553/5553446.xml?temp=.5597345

IE提示:
无法显示 XML 页。
使用 样式表无法查看 XML 输入。请更正错误然后单击 刷新按钮,或以后重试。


--------------------------------------------------------------------------------

XML 文档必须有一个顶层元素。处理资源 'http://community.csdn.net/Expert/topic/5553/5553446.xml?temp=.5597345' 时出错。
...全文
12 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
c_hua6280 2007-06-04
尊敬的用户TomMax,您好:
您所提供的帖子链接是可以打开的,我这里可以正常打开该帖,并未报错.帖子标题"C#中,有什么技术可以将多线程应用在界面绘制上? ",帖子内容如下
"因为.net中提供的gui库不允许跨线程操作,所以当用户界面上的控件一多起来之后,gui反映速度就会急剧下降,双缓冲等一般手段完全不起作用。现在有2个问题请教各位:

当界面上会有很多控件时,
1. 如果这些控件有部分分布在可见区域之外,如何取消它们的绘制?(因为不在可见区域内,画出来也看不见)

2. 如果这些控件全部都处于可见状态,如何提高绘制速度?



另外,提供一个比较具体的例子,属于第一种情况:

class 复合控件 : UserControl
{
private System.Windows.Forms.许多控件;

private void InitializeComponent()
{
许多控件 = new 许多控件();
许多控件.许多属性 = 各自的属性设置;
this.Controls.Add( 各种容器 );
各种容器.Controls.Add( 许多控件 );
}

public 复合控件()
{
InitializeComponent(); // 这个过程相当耗时间
}
}

class Form1 : Form
{
private System.Windows.Forms.Form里的许多控件;

private void InitializeComponent() // 这个过程相当耗时间
{
Form里的许多控件 = new Form里的许多控件();
Form里的许多控件.许多属性 = 各自的属性设置;
this.Controls.Add( Form里的各种容器 );
Form里的各种容器.Controls.Add( Form里的许多控件 );
}

public Form1()
{
InitializeComponent();

this.某容器控件.SuspendLayout();
for (int i=0; i<某个数; ++i)
{
复合控件 c = new 复合控件();
c.Location = new Point( i * ( c.Width + 3 ), 0 );
// 这里是横向排列扩展。
// 根据需要也可能会是纵向排列的控件,
// 但是一定都会使后面加入的控件超出可见区域,
// 这时候外面的容器控件会出现滚动条。

this.某容器控件.Controls.Add( c );
}
this.某容器控件.ResumeLayout();

// 前面这个循环相当耗时,当 Form1 还没有显示出来的时候(也就是说
// 类似的工作是在 Form1 的构造函数或者 Load 事件中进行),可以用
// Splash 之类的东西挡一挡,但是这个过程太长的话用户会产生反感。

// 而且,最重要的是,当主界面的 gui 上加入了这么多控件之后,程序
// 的 gui 重绘明显会变得很慢,即使开了双缓冲也起不到明显的效果,
// 甚至是完全看不出效果。但是这个过程又不能用 BackgroundWorker
// 之类的手段放到后台线程完成。

// 请问诸位高手有什么好的办法可以解决吗?
}
}
"

您再试试,看看该帖是否可以正常打开?
回复
发帖
客服专区
创建于2007-11-23

140

社区成员

客服专区
申请成为版主
帖子事件
创建了帖子
2007-05-31 02:12
社区公告
暂无公告