委托BegionInvoke是指通过委托方法执行多线程任务,例如:

//定义委托成员变量

delegate  void dg_DeleAirport();

//指定委托函数

dg_DeleAirport dga = AirportBLL.DeleteHistoryTransAirport;

//通过BeginInvoke以异步线程方式执行委托函数,可通过EndInvoke获取返回值

//如果委托函数需要传入参数,这些传入参数写在下面的两个null之前,

//这两个参数,第一个可指明回调函数名称(函数本身可由参数,但这里不写参数),就是异步线程结束后主线程执行的函数,参数一般就是asrs,以便主线程处理返回结果,回调函数一般诸如xxxCompleted,且必须带参数(IAsyncResult asrs),回调函数如:

void DelAirportCompleted(IAsyncResult df)
{
       if (df != null)
            {
                string cc=(df.AsyncState as dg_DeleAirport).EndInvoke(df).ToString();
            }
            inprocess = false;
}

//第二个参数表示第一个参数代表的值,往往就是调用者本身,如下句的dga。

IAsyncResult asrs = dga.BeginInvoke(null, null);

//此时,主线程将直接执行后续代码,不会等待委托函数执行完毕。但是,可以通过EndInvoke或asrs.IsCompleted等阻塞函数进行强制等待委托函数完成,

//EndInvoke()函数可称为阻塞函数,阻止主进程继续往下进行直到异步线程完成。

//EndInvoke取回委托函数返回值,返回类型跟委托的类型一样,如果委托函数返回类型是void,此函数的返回值也是void

while(!asrs.IsCompleted())一样也可以起到强制主线程等待的作用,而且还可以在while方法中让主线程做些等待相关的操作

dga.EndInvoke(asrs);

while (!asrs.IsCompleted)
{
}

此外,还可通过asrs.AsyncWaitHandle.WaitOne(5000, false);设置等待时间,无论是否完成,在等待时间后,继续往下进行。第一个参数表示等待毫秒数时间,在指定时间内如果异步线程完成,返回true,否则false。

不建议使用阻塞函数,因为主界面会假死,跟不用多线程没有区别。

委托BegionInvoke和窗体BegionInvoke的更多相关文章

  1. winform利用委托delegate进行窗体间通信

    前段时间学习委托,感觉很模糊的样子,也做过许多实例,但是项目中一直没有用到,今天在项目中遇到一个很简单的例子,现在拿出来,做一个简单的记录. 要求:将弹出框里勾选的内容返回到主面板上. 工具:委托. ...

  2. winform利用委托delegate进行窗体间通信,相同标题已经存在??

    前段时间学习委托,感觉很模糊的样子,也做过许多实例,但是项目中一直没有用到,今天在项目中遇到一个很简单的例子,现在拿出来,做一个简单的记录. 要求:将弹出框里勾选的内容返回到主面板上. 工具:委托. ...

  3. WPF 委托 事件 B窗体调用A窗体方法

    原文:WPF 委托 事件 B窗体调用A窗体方法 具体实现 A窗体 中加载B窗体  B窗体触发A窗体里的方法 当点击B窗体确定Button事件   给A窗体俩个TextBox赋值 并关闭B窗体 B窗体 ...

  4. C# 利用委托事件进行窗体间的传值(简化)

    定义委托 public delegate void SendMessageToChildForms(string s); //定义了一个参数是string ,无返回值的委托,名为 SendMessag ...

  5. C# 利用委托事件进行窗体间的传值(新手必看)

    引言: 窗体间传值是每个学习WinForm新手的常见问题,最初级的方法就是 在窗体中先获取到要接受值窗体.然后通过.得到某个空间或者属性,直接赋值,这个需要接收放的窗体属性或者空间必须是public ...

  6. C#基础练习(使用委托窗体传值)

    主界面: Form1中的代码: namespace _06委托练习_窗体传值 {     public partial class Form1 : Form     {         public ...

  7. C#定义委托函数实现在别的窗体中操作主窗体中的SerialPort控件

    1.在主窗体(含有serialPort的窗体)中 //先定义委托 public delegate void OpenPort(); public delegate void ClosePort(); ...

  8. 使用委托实现c#,窗体与窗体之间的传值

    主界面: Form1中的代码: namespace _06委托练习_窗体传值{    public partial class Form1 : Form    {        public Form ...

  9. winform(无边框窗体与timer)

    一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...

随机推荐

  1. XML转Map

    public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, Doc ...

  2. File工具类

    package cn.itcast.bos.utils; import java.io.IOException; import java.net.URLEncoder; import sun.misc ...

  3. 八 web爬虫讲解2—urllib库爬虫—ip代理—用户代理和ip代理结合应用

    使用IP代理 ProxyHandler()格式化IP,第一个参数,请求目标可能是http或者https,对应设置build_opener()初始化IPinstall_opener()将代理IP设置成全 ...

  4. 使用PorterDuffXfermode画出刮刮奖效果p146-p148

    package com.zzw.Qunyinzghuan3; import android.content.Context; import android.graphics.Bitmap; impor ...

  5. 2017.10.30 Epicor -ERP

    1 公司新用ERP系统,做使用培训,mark... This course reviews the project management flow in the Epicor application. ...

  6. poj3107(dfs,树形dp)

    和poj1655的方法完全一样,但是这道题的n的范围大了,用vector存图会TLE(poj没有O2编译优化),所以改用前向星来存图就可以了.. 有关树的重心,看这里:poj1655 这里解释一下前向 ...

  7. js实现显示系统时间的表盘

    核心: 1,document.styleSheets 修改css里的keyframes属性值 2,表针角度的计算 最终显示效果: <!DOCTYPE html> <html> ...

  8. 使用tor实现匿名扫描/SSH登录

    你要做坏事时,最先应该想到匿名.扫描网站/主机,或利用漏洞:甚至在大天朝发帖都有风险,为了防止半夜鬼敲门,我们可以使用tor实现匿名. 如果你不知道tor是什么,看:https://zh.wikipe ...

  9. 在Blender上安装RenderMan插件

    2018/3/27 Download and Install Blender itself Download RenderMan Installer (Need to register an acco ...

  10. JavaScript例子

    模态框(JavaScript) <!DOCTYPE html> <html lang="en"> <head> <meta charset ...