WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】
2013-08-20 22:22
387 查看
第一步:首先我们创建一个winfor的项目
第二步:我们建一个窗体
在一个窗体里面 打开一个另外的窗体 另外的窗体有一个按钮 点击后就开始下载 下载完成后 在注册窗体上面 显示下载完成(达到在一个窗体里面修改另外的一个窗体)
?
第三步:完成下载窗体的进度条
第四步:处理窗体假死问题
(用到多线程和委托)
第五步:处理跨线程调用ui
线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
第六步 主窗体添加委托 解决跨线程调用UI
视频下载地址:http://pan.baidu.com/share/link?shareid=1740683788&uk=540184145
需要源码的可以到这里向楼主要:http://www.bamn.cn/redirect.php?tid=19&goto=lastpost#lastpost
第二步:我们建一个窗体
在一个窗体里面 打开一个另外的窗体 另外的窗体有一个按钮 点击后就开始下载 下载完成后 在注册窗体上面 显示下载完成(达到在一个窗体里面修改另外的一个窗体)
?
private void button1_Click(object sender, EventArgs e) { for (int i = 0; i <= 100; i++) { this.progressBar1.Value = i; System.Threading.Thread.Sleep(300); } }
第四步:处理窗体假死问题
(用到多线程和委托)
public partial class FormLoad : Form { public FormLoad() { InitializeComponent(); //为这个委托变量赋值 changeProgerss = FunChangeProgress; } public void FunChangeProgress(int value) { this.progressBar1.Value = value; } private void button1_Click(object sender, EventArgs e) { //创建一个线程 System.Threading.Thread thr = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Download)); thr.Start(100); } //线程方法 一定要是obje 类型参数 同时返回值是void private void Download(object obj) { for (int i = 0; i <= 100; i++) { //执行委托 changeProgerss(i); System.Threading.Thread.Sleep(300); } } //在下载窗体上面 建一个委托 public delegate void ChangeProgress(int value); //创建上面的委托的变量 public ChangeProgress changeProgerss; }
第五步:处理跨线程调用ui
线程间操作无效: 从不是创建控件“progressBar1”的线程访问它。
for (int i = 0; i <= 100; i++) { //执行委托 this.progressBar1.Invoke(changeProgerss, i); //changeProgerss(i); System.Threading.Thread.Sleep(300); }
第六步 主窗体添加委托 解决跨线程调用UI
public FormMain() { InitializeComponent(); sif = ShowInfoFun; } public void ShowInfoFun(string text) { this.label1.Text = text; } private void button1_Click(object sender, EventArgs e) { FormLoad fl = new FormLoad(); //在主窗体中注册子窗体的事件 fl.eventShowInfo += new FormLoad.ShowInfo(fl_eventShowInfo); fl.Show(); } //事件的执行方法 void fl_eventShowInfo(string text) { this.label1.Invoke(sif, text); } //在主窗体这里 创建一个委托 public delegate void ShowInfo(string text); public ShowInfo sif; }
视频下载地址:http://pan.baidu.com/share/link?shareid=1740683788&uk=540184145
需要源码的可以到这里向楼主要:http://www.bamn.cn/redirect.php?tid=19&goto=lastpost#lastpost
相关文章推荐
- WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】
- Winform中的委托与事件 应用的一个小实例
- WinForm中 事件 委托 多线程的应用
- [python] 1、python鼠标点击、移动事件应用——写一个自动下载百度音乐的程序
- WinForm程序进度条:ProcessBar -一个实例应用
- (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
- javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。
- 一个关于委托、事件、多线程、异步的Demo
- 委托和事件的应用,模拟一个战斗机防盗器
- 自己学习android网络应用部分,练习的一个多线程的服务器和客户端
- C#事件-换一个角度理解委托和事件
- 演示事件(Event)怎样使用以及怎样为用户控件添加一个事件(示例代码下载)
- android-downloader_一个带进度条的下载开源框架源码解析(雷惊风)
- 委托与事件以及应用
- 委托与事件 【 哎~!今天这个网那叫一个给力,“在艰苦的环境中造就人才!”】
- android多线程断点下载-带进度条和百分比进度显示效果
- 一个根据断点续传原理而实现的多线程下载的程序
- java网络编程之Http多线程下载应用实例
- Winform 下载文件进度条设计
- 模拟winform里的控件的事件和委托机制