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界面假死。

  • 相关阅读:
    POJ2253——Frogger(Floyd变形)
    Mininet python代码创建拓扑、交互式界面创建主机、交换机
    Wireshark小技巧
    胖AP基本配置:
    IPsec
    数据链路层、ARP/RARP、ICMP、ping和traceroute
    IPv4地址范围和一些小知识
    UDP:rfc768/广播和多播/IGMP
    TCP
    人生苦短之我用Python篇(XML模块)
  • 原文地址:https://www.cnblogs.com/kongbailingluangan/p/14671183.html
Copyright © 2011-2022 走看看