WPF 利用BackgroundWorker 动态加载UI

 BackgroundWorker bw = new BackgroundWorker();
            bw.DoWork += (ee, se) =>
                {
                    //TODO 需要异步请求的操作
                };

            bw.RunWorkerCompleted += (ew, sw) =>
                {
                    Dispatcher.Invoke(new Action(() =>
                        {
<span style="white-space:pre">				</span>//TODO 动态生成UI
                        }));
                };

            bw.RunWorkerAsync();   

Demo:

List<ResourceIndex> CourseWareList = new List<ResourceIndex>();//课件
List<ResourceIndex> TeachingPlanList = new List<ResourceIndex>();//教案
List<ResourceIndex> ExercisesList = new List<ResourceIndex>();//习题
List<ResourceIndex> MaterialList = new List<ResourceIndex>();//素材
List<ResourceIndex> resList = new List<ResourceIndex>();

string bookCode = EBookContext.Instance.CurrentBook.IndexInfo.Code;
string unitCode = EBookContext.Instance.CurrentUnit.UnitCode;

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (ee, se) =>
    {
        resList = SearchResource(bookCode, unitCode);
        foreach (ResourceIndex resIndex in resList)
        {
            switch (resIndex.Usage)
            {
                case ResourceUsage.Courseware:
                    CourseWareList.Add(resIndex);

                    break;
                case ResourceUsage.TechingDesign:
                    TeachingPlanList.Add(resIndex);

                    break;
                case ResourceUsage.TestQuestion:
                    ExercisesList.Add(resIndex);

                    break;
                case ResourceUsage.TeachMaterial:
                    MaterialList.Add(resIndex);

                    break;
                default:
                    break;
            }
        }
    };

bw.RunWorkerCompleted += (ew, sw) =>
    {
        Dispatcher.Invoke(new Action(() =>
            {
                ClearResource();
                this.onLoading.Visibility = Visibility.Collapsed;

                if (CourseWareList.Count > 0)
                {
                    ResDetailContainer resc1 = new ResDetailContainer("课件", "#FF48B95A", CourseWareList);
                    this.resContainer.Children.Add(resc1);
                }

                if (TeachingPlanList.Count > 0)
                {
                    ResDetailContainer resc2 = new ResDetailContainer("教案", "#FFFB5454", TeachingPlanList);
                    this.resContainer.Children.Add(resc2);
                }

                if (ExercisesList.Count > 0)
                {
                    ResDetailContainer resc3 = new ResDetailContainer("习题", "#FF3E80DA", ExercisesList);
                    this.resContainer.Children.Add(resc3);
                }

                if (MaterialList.Count > 0)
                {
                    ResDetailContainer resc4 = new ResDetailContainer("素材", "#FFE7B01B", MaterialList);
                    this.resContainer.Children.Add(resc4);
                }

                if (resList.Count == 0)
                {
                    this.noRes.Visibility = Visibility.Visible;
                }

            }));
    };

bw.RunWorkerAsync(); 
时间: 2025-01-05 02:40:26

WPF 利用BackgroundWorker 动态加载UI的相关文章

Qt动态加载ui文件(实现加载客户自定义的一些widget,如QVTKWidget)

利用Qt动态加载ui文件主要是实现ui设计和软件设计的分离,ui只需要向编程人员提供各个控件名称即可.这样做可以满足软件设计后期,由于客户需求,ui风格多变的情况下,不影响编程人员的开发. 具体实现:网上资料较多,一般利用QuiLoader ,只能加载Qwidget 或者QFrame,以下代码主要实现加载的Qwidget 窗口的子窗口有一些用户自定义的Widget ,这里我想加载的是QVTKWidget QString uiFilePath = "E:\\TASK\\CTSoftware\\Qt

QUiLoader 动态加载.ui文件

动态加载UI文件是指,用 Qt Designer 通过拖拽的方式生产.ui 文件.不用 uic工具把.ui 文件变成等价的 c++代码,而是在程序运行过程中需要用到UI文件时,用 QUiLoader 加载.ui文件,达到相同目的. --------------------------------------------------------------------------------------------------------------------------------------

利用反射动态加载程序集中所有的继承于Form的子类

利用C# 的反射,能够轻松快捷的创建指定类型的未知对象,比如继承某个接口的类,继承于某个基类的子类. 问题场景: 我自己创建一个解决方案,这个方案里面放了很多的小工具,每一个工具都是一个小窗体,于是,我就用一个MID窗体来包含这些窗体. 这样问题就来了,每一次我添加一个小工具,我就必须在MID窗体里面添加一个按钮,或者是一个菜单.在事件写上,让某个窗体显示出来.这类无聊的语句. 那么能不能让程序自动查找程序集中的窗体,自动创建按钮,或者菜单. 这样就可以达到动态创建的目的了 解决方案: 假设我们

NGUI学习笔记(四):动态加载UI和NGUI事件

动态加载UI 我们进入一个场景后,如果将这个场景所有可能用到的UI都直接放在场景中做好,由于要在进入场景时就部署好所有的UI对象,那么当UI对象较多时会碰到的问题是:1.初始化场景会产生非常明显的卡顿.2.所有UI都在场景中导致占用大量的内存. 所以我们需要对UI组件进行动态加载和销毁,当需要打开指定的UI时,动态的创建出这个UI对象,而当关闭这个UI对象之后,可以对其进行销毁从而释放出内存. 将UI制作成一个预制件 我们可以在场景中制作好一个UI,然后将其保存成一个预制件后从场景中移除,然后我

java反射并不是什么高深技术,面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象

java反射并不是什么高深技术,面向对象语言都有这个功能. 面向对象语言都有这个功能,而且功能也很简单,就是利用jvm动态加载时生成的class对象,去获取类相关的信息 2.利用java反射可以调用类的私有方法么?private()方法 答:可以,class取出method,method继承executable类,executable类继承AccessibleObject类,AccessibleObject有个setAccessiable()设置这个方法是否可访问. 则设置成true,就可将pr

WPF 仪表盘 刻度盘 动态 加载中 开源

原文:WPF 仪表盘 刻度盘 动态 加载中 开源 1. 表盘 参数可以设置, codeproject上写的.网址在这里. 源码里有demo,很详细. 源码在这里. 2. 动态Loading 截图效果跟实际有点不一样. 自己把源码写成 资源就好用了呗 地址在这里 3.  有两个类似的                              地址1  地址2 原文地址:https://www.cnblogs.com/lonelyxmas/p/9689224.html

[WPF学习笔记]动态加载XAML

好久没写Blogs了,现在在看[WPF编程宝典],决定开始重新写博客,和大家一起分享技术. 在编程时我们常希望界面是动态的,可以随时变换而不需要重新编译自己的代码. 以下是动态加载XAML的一个事例代码. 在debug文件夹下新建一个文本文件,重命名为:file.xaml 插入界面代码: <DockPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <Button Name=

利用DexClassLoader动态加载dex文件

Java中也有类加载器ClassLoader,其作用是动态装载Class文件,当我们从网络下载Class文件,或者在编译时不参与而在运行时动态调用时就需要用类加载器.由于Android对class文件进行了重新打包和优化,最终APK文件中包含的是dex文件,加载这种文件就需要用到DexClassLoader. DexClassLoader(dexPath, optimizedDirectory, libraryPath, parent) dexPath:目标类所在的APK或者jar包,/.../

Java抓取利用JS动态加载的网页

最近实验室项目涉及到很多爬虫相关的东西,在此做个整理,爬虫最难的问题应该是javascript和ajax的处理.现在很多网站使用大量ajax,普通爬虫无法获取js生成的内容. 对于普通的静态网页,HttpClient是Java中抓取网页的利器,然而针对像京东商品页面这样的页面却无能为力,例如:http://item.jd.com/10875285.html 主要原因是页面中的一部分信息比如商品评论是通过JavaScript异步加载的,如果直接通过HttpClient直接抓取只会得到其中的js代码