关于异步更新UI界面多线程执行后台操作的一些思路整理
来源:互联网 发布:linux gtk 编辑:程序博客网 时间:2024/06/05 03:23
有些时候,某些操作会比较耗时间(如:连接一个没有开启的远程数据库),如果这个操作在UI线程上执行的话,就会在返回之前,让界面处于"假死"状态,影响用户体验.因此,从其他线程操作这类的"耗时"操作,是很有必要的,这里我主要整理当前,.net框架下,托管代码中线程安全的情况,因此,关闭掉线程安全检查来实现跨线程的界面更新操作不在讨论范畴.
我主要说说beginInvoke操作,这是一个异步的多线程调用.原理大家直接看msdn或者相关的大牛的科普分析就是了,我先说理论:
1.控件可以调用beginInvoke方法,并且可以传递参数列表(一个委托,参数数组),因此用你想更新的UI界面的控件来调用,是很理想的,用窗体本身,也行
2.由1知道,调用需要一个委托,因此,要声明一个委托类型,这个委托就是要异步执行的方法的委托实例的类型,这里有点儿拗口,知道这个委托时异步执行的就行UI更新
3.委托只是一个调用,因此需要一个单独的新线程来运行你的"耗时线程",这样就脱离了用户界面了.
4.开始这条新线程.
------------------------------下面是编码的步骤:里面的单词不是关键字,只是一个描述标示--------------------------------
1.声明一个委托类型,参数列表和你更新UI的方法参数列表相同 ,我用delegate表示
2.编写你的ui更新方法的代码代码,参数列表要和委托相同(会用来实例化我们的delegate),我用updateUI
3.写一个方法,这个方法会执行你的耗时操作和调用我们上面的delegate,也就是我们的新线程,参数列表最好为空,因为在开线程的时候,用来实例化threadState委托实例,我用thread表示.
4.注意:一定要在3中的方法里面实例化一个1中的deletegate,用控件调用beginInvoke,参数中的委托就用实例化的delegate
5.在你想执行这些操作的地方,开启新线程,调用3中的方法thread,并开始线程,就可以了
6.有什么不正确的地方,请大侠不要飘过,多多指教,有什么疑问的地方,请留言,共同讨论,另外需要demo参考的,也可以在评论里面联系我
7.谢谢各位看官,总结完毕.
- 关于异步更新UI界面多线程执行后台操作的一些思路整理
- Thread+Handler异步执行耗时操作更新UI线程界面
- 多线程异步处理:AsyncTask异步更新UI界面
- 关于Handler在异步更新UI作用的一些理解
- Handler后台异步更新UI的总结
- android异步更新UI界面的方法
- 一些关于怎样把log4net信息输出到UI界面的思路
- android异步更新UI界面
- android关于UI界面更新的问题
- c# 多线程异步更新UI
- 多线程异步处理:AsyncTask异步更新UI界面 android开发教程
- 子线程如何异步更新Fragment的UI界面
- 子线程如何异步更新Fragment的UI界面
- UI界面的更新
- 关于对异步任务执行的操作
- 使用AsyncTask异步更新UI界面
- 7.28 使用AsyncTask异步更新UI界面
- 使用AsyncTask异步更新UI界面
- 自定义actionBar
- 币涨
- enum的用途
- Spring MVC过滤器-字符集过滤器(CharacterEncodingFilter)
- UML从需求到实现---类图
- 关于异步更新UI界面多线程执行后台操作的一些思路整理
- vijos1046题解
- RHEL忘记ROOT密码解决办法(单用户模式)
- shell环境变量以及set,env,export的区别
- vsftpd 设置用户目录
- 如何设置jquery的ajax方法为同步
- vijos1760题解
- PCI设备的地址空间
- 最新版本eclipse Kepler Service Release 1无自动提示功能解决方式