VS 2008 (C#) 使用Winform方式,控件Listview要等数据全部加载完后才显示,有啥办法边加载边显示?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS 2008 (C#) 使用Winform方式,控件Listview要等数据全部加载完后才显示,有啥办法边加载边显示?相关的知识,希望对你有一定的参考价值。
做了一个小程序,是搜索硬盘里的jpg文件,搜索到然后加载到Listview控件中去,现在要一直等到搜索完全部jpg文件后,Listview控件才能显示数据,有没有什么办法,可以边搜索文件边加载显示?就像windows系统自带的查找功能一样。
开一个线程去搜索 JPG 图片,然后创建一个委托将 ListView.Items.Add 这个方法绑定到委托上公开给线程调用就可以了~追问按照你的说法,辅助线程主要用来搜索jpg图片,把搜索到的JPG路径要保存到变量或DataSet中去,主线程用来把变量或DataSet中的图片路径和图片大小加载到ListView中去,但是线程执行起来是无序的,不能确定是先执行主线程还是先执行辅助线程,因为他们要共用一个变量,如果主线程先执行,这样就会有问题,把一个没有内容的变量加载到Listview会出错,这样的话如何处理?
追答放弃变量的想法,同时操作一个变量会遇到线层锁问题,方法不可取的。
要通过委托,让子线程直接操作主线程内的控件就行了~建成检索到 JPG 图片,然后直接通过委托更新到 ListView 的列表中。
我是用递归调用的,当搜索到一个文件后就添加到ListView,但现是全部搜索完后,Listview中的数据才会显示出来,你说的每次添加了图片后刷新一下Listview,是用什么方法来刷新的,有点不太明白?谢谢。
追答refresh方法
追问试了一下,效果不太好,屏幕不停的刷新,搜索时间比以前没有刷新的时候长了一些,还是多谢了。
参考技术B 代码的问题,搜索几个更新一下界面SQL Server 2005 与VS2005编程语言C# winform实现数据库备份与恢复。
我使用的是SQL Server 2005 与VS2005在C#语言下编写winform,由于是C\S模式的数据库共享所以在恢复的时候出现了问题。大体框架是这样的:我用vs2005编写的顾客端以及服务端winform都访问sqlserver2005里面的restaurant.mdf,我备份的代码如下: try string sqltxt = @"BACKUP DATABASE [Restaurant] TO Disk='e:\\" + textBox1.Text + ".bak" + "'"; SqlConnection myConn = new SqlConnection(); db.myConn.Open(); SqlCommand cmd = new SqlCommand(sqltxt, db.myConn); cmd.ExecuteNonQuery(); db.myConn.Close(); if (MessageBox.Show("数据库备份成功,备份在E盘中。", "备份成功", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK) this.Close(); catch (Exception ex) MessageBox.Show(ex.Message.ToString()); 这个成功了。还原代码如下: try SqlConnection myConn = new SqlConnection(); db.myConn.Open(); SqlCommand cmd = db.myConn.CreateCommand(); cmd.CommandText = "alter database Restaurant modify name=Restaurant1"; cmd.ExecuteNonQuery(); cmd.CommandText = "use master restore database [Restaurant.mdf] from Disk='" + textBox1.Text.Trim() + "'"; cmd.ExecuteNonQuery(); if (MessageBox.Show("恢复成功", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK) this.Close(); catch (Exception ex) 出现错误:消息 1834,级别 16,状态 1,第 1 行 无法覆盖文件 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\Restaurant.mdf'。数据库 'Restaurant1' 正在使用该文件。 消息 3156,级别 16,状态 4,第 1 行 文件 'Restaurant' 无法还原为 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\Restaurant.mdf'。请使用 WITH MOVE 选项来标识该文件的有效位置。 消息 1834,级别 16,状态 1,第 1 行 无法覆盖文件 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\RESTAURANT_1.ldf'。数据库 'Restaurant1' 正在使用该文件。 消息 3156,级别 16,状态 4,第 1 行 文件 'Restaurant_log' 无法还原为 'D:\我的文档\Visual Studio 2005\Projects\餐饮服务端\餐饮服务端\RESTAURANT_1.ldf'。请使用 WITH MOVE 选项来标识该文件的有效位置。消息 3119,级别 16,状态 1,第 1 行在计划 RESTORE 语句时发现了问题。以前的消息提供了详细信息。消息 3013,级别 16,状态 1,第 1 行RESTORE DATABASE 正在异常终止。
参考技术A 停掉数据库服务器。将刚才生成的数据库的日志文件*_log.ldf删除,用要恢复的数据库mdf(*.mdf)文件覆盖刚才生成的数据库数据文件*.mdf。
启动数据库服务器。
restore
database
DemoDB
from
disk='c:\a.bak'
--c:\a.bak是备份文件名
with
move
'demodb_data01'
to
'...\demodb_data01.mdf'
--将要恢复到文件
,move
.....
,move
'demodb_log'
to
'...\demodb_log.ldf'
--------------------------------------------------------------------------------
以上是关于VS 2008 (C#) 使用Winform方式,控件Listview要等数据全部加载完后才显示,有啥办法边加载边显示?的主要内容,如果未能解决你的问题,请参考以下文章
C# Winform点餐系统(源码+SQL Server 2008 R2)