zoukankan      html  css  js  c++  java
  • C# BeginInvoke用法记录

    一、简述

      简单记录一下C# BeginInvoke(异步委托)涉及的知识点,以便随时可查询。

    二、内容

      BeginInvoke有以下几种用法:

    private void lblContentText(string val)
    {
        if (lblContent.InvokeRequired)
        {
            lblContent.Invoke(new Action<string>(lblContentText), new object[] { val });
        }
        else
        {
            lblContent.Text += val;
        }
    }
    public string TestFunction(int ms)
    {
        string content = "执行结果;";
        Thread.Sleep(ms);
        return content;
    }
    private void Main()
    {
        Thread thread = new Thread(() =>
        {
            Func<int, string> action = TestFunction;
    
            //lblContentText(action.Invoke(3000));  //界面一起输出“执行结果;abc;”
    
            //IAsyncResult iasr = action.BeginInvoke(3000, (val) =>
            //{
            //    lblContentText(action.EndInvoke(val));
    
            //}, null);  //界面先输出“abc;”,再输出“执行结果”
    
            IAsyncResult iasr = action.BeginInvoke(3000, null, null);
            int i = 0;
            while (!iasr.AsyncWaitHandle.WaitOne(200/*每200毫秒检测一次*/))
            {
                lblRemarkText((++i).ToString());
            }
            lblContentText(action.EndInvoke(iasr));  //先进行计数,然后一起输出“执行结果;abc;”
    
            lblContentText("abc;");
        });
        thread.IsBackground = true;
        thread.Start();
    }

      BeginInvoke 是在Thread里面执行的,主要是防止UI界面假死。

  • 相关阅读:
    微信公众号支付JSAPI,提示:2支付缺少参数:appId
    Application对象
    Apache安装和文件配置
    Apache编译教程
    MS4W安装教程
    MapServer教程2
    Tomcat修改源码,重新编译
    MapServer教程
    QGIS SDK下载
    OpenStreetMap全球库
  • 原文地址:https://www.cnblogs.com/kongbailingluangan/p/14671183.html
Copyright © 2011-2022 走看看