c#程序载入过程中显示载入等待界面怎么做
我做的winform程序中,由于导入数据库会很长一段时间,就做了一个类似载入游戏时出现小漏斗的的一个panel。我用的是Stopwatchsw=newStopwatch(...
我做的winform程序中,由于导入数据库会很长一段时间,就做了一个类似载入游戏时出现小漏斗的的一个panel。我用的是 Stopwatch sw = new Stopwatch();当sw.start()时显示这个panel。可是这个panel上面的东西显示不出来,上面的控件就是灰色的,不管载入的时间长短都是这样。
请问下这个问题该怎么解决?或者想实现这个功能用什么其他的办法好一些呢 展开
请问下这个问题该怎么解决?或者想实现这个功能用什么其他的办法好一些呢 展开
4个回答
展开全部
导致楼主出现的结果,是因为楼主将所有逻辑放在了主线程里,系统就一步一步来的。
楼主可以使用多线程的方法来实现所期望的结果。
步骤如下
1、实例化导入数据子线程
2、等待子线程完成
3、操作主线程
这里面可能涉及到2个问题,一个是,如何判断子线程完成了,一个是涉及到跨线程操作控件的问题。
第一个问题,可以使用一个timer控件,每隔一秒判断一次子线程状态。
第二个问题,最简单的方式是再构造器下添加“CheckForIllegalCrossThreadCalls = false;”
代码参考。请自行组合。
1)全局变量
private Thread tConnectionDB;
2)加载事件
//显示漏斗
//实例化子线程
tConnectionDB = new Thread(new ThreadStart(Connection));
tConnectionDB.Start();
3)Timer事件
if (tConnectionDB.ThreadState == ThreadState.Stopped)//判断线程是否停止
{
//显示数据
//停止Timer控件
timer1.Enable=false;
}
楼主可以使用多线程的方法来实现所期望的结果。
步骤如下
1、实例化导入数据子线程
2、等待子线程完成
3、操作主线程
这里面可能涉及到2个问题,一个是,如何判断子线程完成了,一个是涉及到跨线程操作控件的问题。
第一个问题,可以使用一个timer控件,每隔一秒判断一次子线程状态。
第二个问题,最简单的方式是再构造器下添加“CheckForIllegalCrossThreadCalls = false;”
代码参考。请自行组合。
1)全局变量
private Thread tConnectionDB;
2)加载事件
//显示漏斗
//实例化子线程
tConnectionDB = new Thread(new ThreadStart(Connection));
tConnectionDB.Start();
3)Timer事件
if (tConnectionDB.ThreadState == ThreadState.Stopped)//判断线程是否停止
{
//显示数据
//停止Timer控件
timer1.Enable=false;
}
追问
tConnectionDB = new Thread(new ThreadStart(Connection));
这句里面的connection是什么东西啊?
还有就是你说的“CheckForIllegalCrossThreadCalls = false;”这个东西在哪里添加。
能说清楚些吗,我不是很懂
追答
Connection指的是,读取数据库数据的那个方法。
比如你有个全局变量DataTable dt,这个变量是用来存放你读取到的数据表
而这个方法,就用Connection命名吧,注意,tConnectionDB = new Thread(new ThreadStart(Connection));里,子线程的方法是没有括号的哦。
假设你的Connection方法,也就是子线程的方法,他操作了某个控件,比如修改了Panle的Visible属性,那么程序肯定要报错,因为Panle是主线程的控件,子线程是不能修改他的。正确的做法是使用委托,但是写起来可能有点麻烦,而且我也不会标准的写法,所以就姑且用“CheckForIllegalCrossThreadCalls = false;”
楼主可以先不添加这段代码,当程序报错,提示你跨线程操作控件时,请在窗体的构造器下,添加如下代码。
构造器就是
public Form1()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;//添加在这里
}
展开全部
不要用单线程做,因为单线程载入时不会一边载入一边给用户反馈,用双线程或时钟控件timer当作循环,每次比对一下载入文件大小和源文件大小,二者相等时关闭反馈窗口,打开程序。
追问
请问下,我怎么比对载入文件和源文件的大小呢?
追答
载入文件的话很简单,你用的再入文件类中都会自带以载入的属性。源文件的话你要从文件信息里读取了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用进程去载和数据 在进程中更新载入的实时状态
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
panel.Enable有没有设为true啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询