免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 3129|回复: 2
收起左侧

[技术交流] c# listView用这个来显示arcgis图层的属性表速度快

[复制链接]

3

主题

288

铜板

0

好友

技术员

Rank: 3Rank: 3

积分
26
发表于 2015-2-10 17:11 | 显示全部楼层 |阅读模式
两万条数据只需要10秒左右完成加载到listView里——C#线程与线程池使用介绍

应用程序可以拥有多个线程,当程序需要大量时间来处理部分业务或流程时,就可以通过线程来操作,如果应用程序没有用到线程,那将会出现很麻烦的事情,例如:界面上有个dataGridView需要填充数据,如果有Form_Load事件中实现数据绑定,如果在主线程中操作,那么你运行打开窗体的时候就会出现程序假死的现象.这不是客户所接受的,所以在程序开发中,线程的应用是不可缺少的一部分.
我们用多线程来开发程序,目的就是减少处理器单元的闲置时间,增加处理器单元的操作能力.但这并不能说明在程序中可以泛用多线程,应用不当,会降低系统的性能.例如:如果完成一个作业需要的时间为N,在多线程的情况下,创建线程需要的时间为N0,线程中处理的作业需要的时间为N1,线程销毁需要的时间是N3,还有一些其它的时间这里就不算了,这里可以看出如果作业流程简单的,占用资源和时间不长的则不需要利用一个线程来处理,如果一个作业需要不停的创建线程则需要利用到线程池,从而提高程序的性能.
需要多线程作业,需要添加System.Threading命名空间,下面细说一个Thread的操作:
通过Thread一次使用一个线程,来创建和删除线程.
创建线程:  
Thread th = new Thread(new ThreadStart(Method));
开始线程:
th.Start();
销毁线程:
th.Abort();
线程名称:
th.Name="A";
线程休眠:
th.Sleep();
线程挂起:
th.Suspend();
线程恢复:
th.Resume();
说到Thread还有一个方法就是设置后台线程
IsBackground属性设为true,该线程即为后台线程。
后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,
CLR将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。注意:后台线程不能直接操作所在进程
之外的数据引用。
通过ThreadPool来创建线程,如果你的程序需要频繁的创建线程的时候你就可以用到这个类,用实现创建线程,提高程
序的性能.通过ThreadPool.QueueUserWorkItem(new WaitCallback(Method), 1)来创建线程池下面请看一下面的代码:
private void button2_Click(object sender, EventArgs e)
{
    int maxTh, minTh, portTh;  
    ThreadPool.GetMaxThreads(out maxTh, out portTh);
    ThreadPool.GetMinThreads(out minTh, out portTh);
    richTextBox1.Text = maxTh.ToString() + " , " + minTh.ToString() + " , " + portTh.ToString() + "\n";
    ThreadPool.QueueUserWorkItem(new WaitCallback(A1), 1);
    ThreadPool.QueueUserWorkItem(new WaitCallback(A2), 1);
}
private void A1(object i)
{
    string str = i.ToString();
    if (this.InvokeRequired)
    {
updateRichTxt ur = new updateRichTxt(UpdateRT);
this.Invoke(ur, str);
    }
}
private void A2(object i)
{
    string str = ((int)i + 1).ToString();
    if (this.InvokeRequired)
    {
updateRichTxt ur = new updateRichTxt(UpdateRT);
this.Invoke(ur, str);
    }
}
private delegate void updateRichTxt(string iTxt);
private void UpdateRT(string iTxt)
{
    richTextBox1.Text = richTextBox1.Text + iTxt + "\n";
}
到这里你应该清楚,多线程的正确应用。

评分

参与人数 1威望 +5 铜板 +10 收起 理由
daitianci + 5 + 10 很用心的技术贴

查看全部评分

1

主题

1546

铜板

7

好友

助理工程师

Rank: 5Rank: 5

积分
168
发表于 2015-2-11 10:21 | 显示全部楼层
好支持顶、
回复 支持 反对

使用道具 举报

37

主题

2万

铜板

111

好友

钻石会员

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
5763
发表于 2022-3-15 09:21 | 显示全部楼层
谢谢分享,支持支持
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表