WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】

第一步:首先我们创建一个winfor的项目

第二步:我们建一个窗体
在一个窗体里面 打开一个另外的窗体 另外的窗体有一个按钮 点击后就开始下载 下载完成后 在注册窗体上面 显示下载完成(达到在一个窗体里面修改另外的一个窗体)

private void button1_Click(object sender, EventArgs e)
{
    FormLoad fl = new FormLoad();
    fl.Show();
}

第三步:完成下载窗体的进度条

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中 事件 委托 多线程的应用的更多相关文章

  1. WinForm中 事件 委托 多线程的应用【以一个下载进度条为例】

    第一步:首先我们创建一个winfor的项目 第二步:我们建一个窗体 在一个窗体里面 打开一个另外的窗体 另外的窗体有一个按钮 点击后就开始下载 下载完成后 在注册窗体上面 显示下载完成(达到在一个窗体 ...

  2. 在WinForm中使用委托来在其他线程中改变控件的显示

    假设winform中有两个控件: 1.ListView用来显示进度的文本提示,ID:listView_progressInfo 2.ProgressBar用来显示进度,ID:progressBar1 ...

  3. JavaScript中事件委托(事件代理)详解

    在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托 ...

  4. 对JS中事件委托的理解

    什么是事件委托: 事件委托——给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪个子元素的事件.(不理解冒泡的可以去百度下) 定义:利用事件冒泡处理动态元素事件绑定的方法,专业术语叫事件委托. 使 ...

  5. winform中如何在多线程中更新UI控件--ListView实时显示执行信息

    1.在winform中,所有对UI的操作,都得回到UI线程(主线程)上来,才不会报错 线程间操作无效: 从不是创建控件的线程访问它. 2.在winform中,允许通过Control.invoke对控件 ...

  6. Winform中利用委托实现窗体之间的传值

    点击打开按扭,打开传输值窗体 public partial class Form1 : Form { public Form1() { InitializeComponent(); } public ...

  7. winform中使用委托进行窗体之间的传值

    一.传统的方式 创建一个公共数据资源类,用于存储窗体2的TextBox的值: public class ComValue { public static string Txtvalue { get; ...

  8. Js 中的事件委托/事件代理

    什么叫事件委托/事件代理呢 ? JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.   事件冒泡: 当事件发生后,这个事件就要开始传 ...

  9. 简单说 JavaScript中的事件委托(下)

    说明 上次我们说了一些,关于 JavaScript中事件委托的 基础知识,这次我们继续来看. 解释 先来一段代码 <!doctype html> <html lang="e ...

随机推荐

  1. Middleware开发入门

    Middleware开发入门 上篇我们谈了Host和Server的建立,但Host和Server无法产出任何有实际意义的内容,真正的内容来自于加载于Server的Middleware,本篇我们就着重介 ...

  2. 动态类(Dynamic)应用

    动态类(Dynamic)应用 背景: 在Coding中有时候会遇到一些需要解析的数据,可是数据的字段数量和名称未统一,我们没法定义实体类来对应.那么我们就会想到通过C#的dynamic动态类来实现,如 ...

  3. linux cat

    cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut  [-bn] [file] 或 cut ...

  4. dozer-初识

    1.简介     dozer是一种JavaBean的映射工具,类似于apache的BeanUtils.但是dozer更强大,它可以灵活的处理复杂类型之间的映射.不 但可以进行简单的属性映射.复杂的类型 ...

  5. ZOJ 2675 Little Mammoth(计算几何)

    圆形与矩形截面的面积 三角仍然可以做到这一点 代码: #include<stdio.h> #include<string.h> #include<stdlib.h> ...

  6. jQuery 表格

    jQuery 表格插件汇总     本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分 ...

  7. 使用线程执行堆栈StackTraceElement设计Android日志模块

    假设你想在你的Android自己主动打印程序MainActivity.onCreate(line:37)这样的类名.方法名称(行)登录如何实现? 1.介绍Java线程执行堆栈  Java.lang包中 ...

  8. 最受欢迎web前端技术总结

    Web前端技术发展非常快,主流技术的进步.想想刚毕业那会用asp技术.目前,该网站已经非常少见主流应用. 后来的后来J2EE框架.然后SpringMVC声望,然而,最近的各种js框架广泛传播,Html ...

  9. .net图片自动裁剪白边函数案例

    1.项目要求上传白底的图片要进行裁剪白边,于是同事谢了个函数感觉很好用. 2. #region 剪切白边 /// <summary> /// 剪切白边 /// </summary&g ...

  10. Javascript技巧实例精选(5)—显示当前的日期和时间

    用Javascript实现在屏幕中打印当前的日期和时间 >>点击这里下载完整html源码<< 这是显示的效果 目前的日期/时间是:Wed Sep 25 2013 23:40:0 ...