本文具体根据异步加载大资源文件案例中的多线程变成学习
C# 中 BeginInvoke 与 EndInvoke 的一个简单的使用案例
在使用 WPF 开发桌面软件过程中,遇到一个需要预加载大量文件的需求,具体需求如下:
- 在软件启动后,需要加载大量的 CAD 资源文件,文件供软件中后续使用。
- 文件加载过程中非常耗时,若同步加载则界面会出现假死的状态。
- 在文件加载过程中,需要保证界面仍然可以进行其他操作,屏蔽跟资源文件有关的操作。
- 文件加载完成后,开放跟资源文件有关的操作。
解决方案:
在软件启动后,软件页面正常完成加载后,后台继续进行异步加载资源文件,此时可操作正在加载的资源文件的按钮设置为不可操作。文件加载完成之后开发操作资源文件的按钮可操作。
具体实现如下:
1、WPF 页面 Window 中存在一个事件:ContentRendered。该事件在窗口的内容呈现完毕之后发生。定义一个方法,方法中进行文件加载的操作,并将该方法绑定到 ContentRendered 事件。
代码如下:
其中,LoadingResources() 方法为实际加载文件的方法;
ShowProgressBarFile 方法中具体实现异步,并更改页面按钮状态
private void Window_ContentRendered(object sender, EventArgs e)
{
//禁用对应的操作按钮
this.btnThreeView.IsEnabled = false;
Func<bool> action = (() => LoadingResources())

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



