WPF 动态添加UI控件 界面假死 怎么办?
大家好!最近用WPF做一个初始化程序,需要动态的在界面上添加控件,这个添加控件的程序运行需要的时间比较长,导致界面假死请问如果我想让这个添加过程动态地显示出来应该用什么方...
大家好!
最近用WPF做一个初始化程序,需要动态的在界面上添加控件,这个添加控件的程序运行需要的时间比较长,导致界面假死
请问如果我想让这个添加过程动态地显示出来应该用什么方法呢?
BackgroundWorker我试了不行,使用Action开多线程还是不行...还是我使用的方法不正确呢?
谢谢大家了! 展开
最近用WPF做一个初始化程序,需要动态的在界面上添加控件,这个添加控件的程序运行需要的时间比较长,导致界面假死
请问如果我想让这个添加过程动态地显示出来应该用什么方法呢?
BackgroundWorker我试了不行,使用Action开多线程还是不行...还是我使用的方法不正确呢?
谢谢大家了! 展开
1个回答
展开全部
对于UI的修改,你还是需要用UI线程去做,否则会报跨线程错误云云
你要分析一下你这个控件到底耗时在哪里,基本上显示过程不会耗很多,应该是你在获取生成该控件所用的数据耗时比较多,你这个时候可以单开线程去处理,并让UI线程显示正在处理或正在加载之类的,当那个线程已经完成了控件的生成以后,再传递给UI线程,让他把控件显示出来就行了,
如果你要加入动画,同样也是由UI线程去做,至于怎么实现,那就是动画那一方面的应用了
你要分析一下你这个控件到底耗时在哪里,基本上显示过程不会耗很多,应该是你在获取生成该控件所用的数据耗时比较多,你这个时候可以单开线程去处理,并让UI线程显示正在处理或正在加载之类的,当那个线程已经完成了控件的生成以后,再传递给UI线程,让他把控件显示出来就行了,
如果你要加入动画,同样也是由UI线程去做,至于怎么实现,那就是动画那一方面的应用了
更多追问追答
追问
因为我初始化的过程是在另一个初始化类中实现的,为了动态显示在UI上我在UI上定义了一系列全局标志位,这些标志位变化的时候就在UI上进行绘制,但是要检测这些标志位是否变化需要另外开一个线程不断的扫描这些标志位的变化,我认为是这个循环扫描导致了界面假死
但是不扫描标志位的话,又不知道画什么....
这种情况下我该如何在标志位变化的一瞬间绘制出相应的控件呢?
谢谢!
追答
我不知道你要绘制的东西都有什么,但是你这个操作完全不用自己去扫描啊,你写一个事件监听就可以了,当标志发生变化时触发事件,然后剩下的由对应的事件处理去完成,就像button一样,你不必去循环扫描他有没有被按下,他自己本身有一个click事件,你只要对这个事件进行处理就行了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询