最近有个用C#开发的winform软件,需要调用matlab导出的dll文件。最开始把dll中类的初始化放在了主窗体的构造函数里面,结果软件打开30多秒才显示界面。由于dll不是本人写的,没法改,只能在C#程序上想办法。
两个方案:
- 使用
Timer
,在主窗体的load
事件里面触发timer,将初始化的代码放在timer_Tick
里面。
尝试延时10秒触发Tick事件,窗体秒开,但是10s之后假死,体验不好。
这种方法可能在加载大数据的时候可以用用。
- 使用多线程的方法,主线程打开窗体,在
load()
里面再开一个线程用来进行初始化。
效果很好!!
本打算自己写的,发现网上已经有人整理的比较好了,直接搬过来吧。
-
用Thread类,讲的非常详细。
https://www.cnblogs.com/dotnet261010/p/6159984.html -
用Task类,.net4.0以后的。
http://www.cnblogs.com/yunfeifei/p/3993401.html -
讨论Task和Thread在效率上有何区别。
https://bbs.csdn.net/topics/390596863
总结一下:
- 最开始多线程都用的是Thread,命名空间为
using System.Threading
。Task是在 .net 4.0之后提供的,命名空间为System.Threading.Tasks
。 - 一般来说,Task更适合多核心处理器,最好是Intel i系列。
- 电脑配置可以额情况下还是尽量用Task吧。